MongoDB の Docker 化¶
この例では、MongoDB がインストール済みの Docker イメージを、どのようにして構築するかを学びます。また、イメージを Docker Hub レジストリ に 送信
して、他人と共有する方法も理解します。
注釈
このガイドでは MongoDB コンテナを構築する仕組みを紹介しますが、 Docker Hub の公式イメージを使っても構いません。
Docker を使い MongoDB インスタンスをデプロイしたら、次のメリットがあります。
- 簡単なメンテナンス、MongoDB インスタンスの高い設定性
- ミリ秒以内で実行と開始
- どこからでも接続可能で共有できるイメージに基づく
注釈
sudo
が好きでなければ、 giving-non-root-access をご覧ください。
MongoDB 用の Dockerfile を作成¶
構築用の Dockerfile
を作成しましょう。
$ nano Dockerfile
オプションですが、 Dockerfile
の冒頭に自身の役割などをコメントしておくと便利です。
# MongoDB の Docker化:MongoDB イメージを構築する Dockerfile
# ubuntu:latest をベースとし、MongoDB は以下の手順でインストール:
# http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/
ちなみに
Dockerfile
は柔軟性がありますが、特定の書式に従う必要があります。最初に必要になるのは、これから作成する MongoDB を Docker 化 したイメージの親にあたるイメージ名の定義です。
Docker Hub Ubuntu リポジトリにある Ubuntu の最新(latest)バージョンを使い、イメージを構築します。
# 書式:FROM リポジトリ[:バージョン]
FROM ubuntu:latest
続けて、 Dockerfile
の MAINTAINER
(メンテナ/担当者)を宣言します。
# 書式:MAINTAINER 名前 <email@addr.ess>
MAINTAINER M.Y. Name <myname@addr.ess>
注釈
Ubuntu システムにも MongoDB パッケージがありますが、作成日が古いものです。そのため、この例では公式の MongoDB パッケージを使います。
MongoDB 公開 GPG 鍵を取り込みます。また、パッケージ・マネージャ用に MongoDB リポジトリ・ファイルも作成します。
# インストール:
# MongoDB 公開 GPG 鍵を取り込み、MongoDB リストファイルを作成
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
RUN echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-3.0.list
この初期準備が終われば、パッケージを更新し、MongoDB をインストールできます。
# apt-get ソースを更新し、MongoDB をインストール
RUN apt-get update && apt-get install -y mongodb-org
ちなみに
MongoDB のバージョンを指定したインストールもできます。そのためには、次の例のようにパッケージのバージョン番号のリストが必要です。
RUN apt-get update && apt-get install -y mongodb-org=3.0.1 mongodb-org-server=3.0.1 mongodb-org-shell=3.0.1 mongodb-org-mongos=3.0.1 mongodb-org-tools=3.0.1
MongoDB はデータ・ディレクトリが必要です。インストールの最終ステップで作成を命令しましょう。
# MongoDB データ・ディレクトリの作成
RUN mkdir -p /data/db
最後に ENTRYPOINT
を設定します。これは Docker に対して MongoDB イメージでコンテナを起動する時、コンテナ内で mongod
を実行するよう命令します。そして、ポートを公開するために EXPOSE
命令を使います。
# コンテナのポート 27017 をホスト側に露出(EXPOSE)
EXPOSE 27017
# usr/bin/mongod を Docker 化アプリケーションのエントリ・ポイントに設定
ENTRYPOINT ["/usr/bin/mongod"]
ファイルを保存したら、イメージを構築しましょう。
この Dockerfile
の完成版は こちら をご覧ください。
MongoDB Docker イメージの構築¶
作成した Dockerfile
を使い、新しい MongoDB イメージを Docker で構築できます。テスト用でない限り、 docker build
コマンドに --tag
オプションを通して Docker イメージをタグ付けするのが良い手法です。
# 書式:docker build --tag/-t <ユーザ名>/<リポジトリ>
# 例
$ docker build --tag my/repo .
コマンドを実行したら、 Docker は Dockerfile
を処理してイメージを構築します。イメージは最終的に my/repo
とタグ付けされます。
MongoDB イメージを Docker Hub に送信¶
全ての Docker イメージ・リポジトリを Docker Hub で保管・共有できるようにするには、 docker push
コマンドを使います。送信するためには、ログインの必要があります。
# ログイン
$ docker login
Username:
..
# イメージを送信
# 書式:docker push <ユーザ名>/<リポジトリ>
$ docker push my/repo
The push refers to a repository [my/repo] (len: 1)
Sending image list
Pushing repository my/repo (1 tags)
..
MongoDB イメージを使う¶
作成した MongoDB イメージを使い、他の MongoDB インスタンスをデーモン・プロセスとして実行できます。
# 基本的な方法
# 使い方:docker run --name <コンテナ名> -d <ユーザ名>/<リポジトリ>
$ docker run -p 27017:27017 --name mongo_instance_001 -d my/repo
# Docker 化した Mongo DB 、学び理解しました!
# 使い方:docker run --name <コンテナ名> -d <ユーザ名>/<リポジトリ> --noprealloc --smallfiles
$ docker run -p 27017:27017 --name mongo_instance_001 -d my/repo --smallfiles
# MongoDB コンテナのログを確認
# 使い方:docker logs <コンテナ名>
$ docker logs mongo_instance_001
# MongoDB を使う
# 使い方:mongo --port <`docker ps` で得られるポート>
$ mongo --port 27017
# If using docker-machine
# docker-machine を使う場合
# 使い方:mongo --port <`docker ps` で得られるポート> --host <`docker-machine ip VM名`の IP アドレス>
$ mongo --port 27017 --host 192.168.59.103
ちなみに
もし同じエンジン上で2つのコンテナを実行したい場合、ホスト側は2つの異なったポートを各コンテナに割り当てる必要があります。
# 2つのコンテナを起動し、ポートを割り当て
$ docker run -p 28001:27017 --name mongo_instance_001 -d my/repo
$ docker run -p 28002:27017 --name mongo_instance_002 -d my/repo
# 各 MongoDB インスタンスのポートに接続できる
$ mongo --port 28001
$ mongo --port 28002
参考
- Dockerizing MongoDB Introduction
- https://docs.docker.com/engine/examples/mongodb/