Dockerのセミナを受けたので、とりあえずDockerの勉強のためにMongoDBをDockerでインストールしてみた。
環境
- CentOS 7.0.1406 (Core)
- docker-1.3.2-4.el7.centos.x86_64
Dockerのインストール
yumでインストールして、その後systemctlコマンドで起動する。
# yum install docker
# systemctl start docker
MongoDBのコンテナイメージのインストール
MongoDBのコンテナイメージはDockerhubで公開されているので、docker pullコマンドでDockerhubからコンテナイメージを落としてくる。
落としてくるコンテナイメージ名はmongo。
# docker pull mongo
Trying to pull repository docker.io/mongo ...
5242d1368ac4: Download complete
21e4345e9035: Download complete
(中略)
c44083d34fb8: Download complete
Status: Downloaded newer image for docker.io/mongo:latest
これで最新バージョンのMongoDBのコンテナイメージがインストールされる。
MongoDBのコンテナの作成&起動
MongoDBの本体(mongod)をdocker runコマンドで作成して、起動する。
# docker run --name some-mongo -d mongo
オプションはそれぞれ、
-
--nameはコンテナのエイリアス指定 -
-dはバックグラウンド実行 - 最後にコンテナイメージである
mongoを指定
docker psコマンドで起動確認もできる。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5eabc7ec23a4 mongo:latest "/entrypoint.sh mong 46 seconds ago Up 45 seconds 27017/tcp some-mongo
コンテナの停止
# docker stop some-mongo
コンテナの二回目以降の起動
# docker start some-mongo
MongoDBクライアントでの接続
MongoDBに接続するためには通常MongoDBクライアントコマンドであるmongoコマンドを用いるが、MongoDB自体をコンテナイメージとしてインストールしているため、ローカル環境にmongoコマンドは存在しない。
そのため、Docker経由でmongoコマンドを呼び出す必要がある。
# docker run -it --link some-mongo:mongo --rm mongo sh -c 'exec mongo "$MONGO_PORT_27017_TCP_ADDR:$MONGO_PORT_27017_TCP_PORT/test"'
オプションはそれぞれ、
-
-iと-tは対話するために必要 -
--rmは終わったらコンテナを消す(コマンドを一回打つためだけのコンテナなので) -
--linkは既に起動しているmongodbコンテナと接続。別コンテナなので、こうしないと接続できない。 -
mongoでコンテナイメージを指定 - 最後に実行コマンドとして
sh -c 'mongo xxx'を指定。これが実行される。-
$MONGO_PORT_27017_TCP_ADDR:$MONGO_PORT_27017_TCP_PORTの部分はDockerで自動的に生成される環境変数でMongoDBのIPアドレスとポート番号を参照している(ちなみに私の環境では172.17.0.1:27017となっていた)。 -
/testはデータベース名。testというデータベースに接続している
-
コンテナの中に入る
# docker exec -it some-mongo bash
コンテナの中はどうなっているのか
mongoのDockerifleを見れば、DevianLinuxの上にMongoDBのDebianパッケージが入っていることがわかる。
そこでコンテナの中に入ってDebianパッケージを見る
# docker exec -it some-mongo bash
root@5eabc7ec23a4:/# dpkg -L mongodb-org-server
(出力抜粋)
/usr/bin/mongod # 本体
/usr/share/man/man1/mongod.1.gz # マニュアル
/etc/mongod.conf # 設定ファイル
/etc/init.d/mongod # 起動スクリプト
ちなみにデータディレクトリは/data/dbだ
所感
とまあ、勉強がてらMongoDBをDocker化してみましたが、非常に簡単でした。
ただ、**MongoDBをコンテナ化してもあまり嬉しい事はないだろうなぁ...**と思います。
というのも、MongoDBのパッケージは1バイナリで非常にシンプルだし、インストールも簡単だし、設定ファイルもシンプル。バージョンアップも1バイナリの置き換えだけだし、すぐに戻す事もできる。登場人物が少なすぎるが故に、コンテナにすることによるメリットが受けにくいものの一つでしょう。