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バイナリの置き換えだけだし、すぐに戻す事もできる。登場人物が少なすぎるが故に、コンテナにすることによるメリットが受けにくいものの一つでしょう。