Help us understand the problem. What is going on with this article?

MongoDBをDockerでインストールする

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

fetaro
データエンジニア
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした