More than 1 year has passed since last update.

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

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.