mroonga
docker

mroongaのdocker imageを作る

More than 1 year has 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の設定などなど。