やりたいこと
mroongaをインストールしたmysqlのdocker imageを作る。docker自体全然触ったことない状態でやっているので、とりあえず動くとこまでを目指す。rootにパスワードも設定せず、さらにどこからでもアクセス可能など、非常に開放感にあふれた設定なのはいったん目をつぶる。無駄なことをやっている可能性は高め。
環境
mac上のvagrantで仮想centos7を動かし、仮想centos7上でmroongaコンテナを稼働させる。
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の設定などなど。