Posted at

mroongaのdocker imageを作る

More than 3 years have passed since last update.


やりたいこと

mroongaをインストールしたmysqlのdocker imageを作る。docker自体全然触ったことない状態でやっているので、とりあえず動くとこまでを目指す。rootにパスワードも設定せず、さらにどこからでもアクセス可能など、非常に開放感にあふれた設定なのはいったん目をつぶる。無駄なことをやっている可能性は高め。


環境

mac上のvagrantで仮想centos7を動かし、仮想centos7上でmroongaコンテナを稼働させる。


Dockerfile


Dockerfile

FROM centos:7

MAINTAINER hokuma

RUN yum install -y http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
RUN yum install -y http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
RUN yum makecache
RUN yum install -y mysql-community-server
RUN yum install -y mysql-community-mroonga
RUN mysql_install_db --datadir=/var/lib/mysql --user=mysql
RUN (/usr/bin/mysqld_safe &); sleep 10; echo "grant all privileges on *.* to root@'%';" | mysql -u root
RUN (/usr/bin/mysqld_safe &); sleep 10; mysql -u root < /usr/share/mroonga/install.sql

EXPOSE 3306

CMD ["/usr/bin/mysqld_safe"]



各行について

最初のほうは割愛。yumで必要なパッケージをインストール。


外部からのアクセス許可

RUN (/usr/bin/mysqld_safe &); sleep 10; echo "grant all privileges on *.* to root@'%';" | mysql -u root

は、macからdocker上のmysqlにアクセスしたかったので、外部からのアクセスをいったん許可している。sleepさせているのは、mysqlサーバの起動を待つため。


mroongaインストール

RUN (/usr/bin/mysqld_safe &); sleep 10; mysql -u root < /usr/share/mroonga/install.sql

はmroongaのinstall処理。mroongaインストール時に自動で走るのだけど、その時点ではmysqlサーバは立ち上がってないし、実際に発行されるコマンドは-p付きで実行されるので対話的にパスワードを入力しなければならなかったりとbuild時の実行に不向き。なので、-p指定なしで最後に実行するようにした。


mysqlの起動

CMD ["/usr/bin/mysqld_safe"]

最初、/usr/bin/mysqld_safe &と書いていたら、そんなコマンドは存在しないと言われて辛かった。&まで含めて一つのファイルと見なされていたっぽく、単純にファイルのみを指定するようにしたらちゃんと起動した。


結果

vagrant上で

docker run -d --name=hokuma-mroonga -p 3306:3306 hokuma/mroonga:latest

macから

mysql -h 仮想マシンのIP -u root

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| Mroonga | YES | CJK-ready fulltext search, column store | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
10 rows in set (0.01 sec)

確かにインストールされている。

| Mroonga            | YES     | CJK-ready fulltext search, column store                        | NO           | NO   | NO         |


もっとやんなきゃいけないこと

rootのパスワード設定。外部アクセス用のユーザ作成、my.cnfの設定などなど。