複数のDockerコンテナをリンク

表題の通り。Dockerではマイクロサービス化し、1コンテナで1サービスを稼動させるのが定石らしい。というのでコンテナを複数に分けたらお互いが接続できることが必要なので試す。

■ 環境

  • Mac OSX (10.9.5)
  • boot2docker
  • Docker 1.7.1

■ やりたいこと

MongoDBのServerを1台起動し、別クライアントから接続してみる。

■ MongoDBのコンテナ起動

下記のようにMongoDBのコンテナを起動する。

$ docker run -ti --rm mongodb -d

起動したものを確認する。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
92c264d2de93        mongo:3.0.3         "/entrypoint.sh mong   5 minutes ago       Up 5 minutes        27017/tcp           berserk_brown
$

起動時に”–name“オプションで名前は指定していないので、自動で振られた”berserk_brown“という名前になっている。

■ CentOSのコンテナ起動

続いて、CentOS 6のコンテナを起動する。起動時に”–link“オプションでMongoDBの名前を指定する。指定の仕方は”–link [NAME]:[コンテナ内で使用できる名前]”である。

$ docker run -ti --rm --link berserk_brown:mongo centos:6

この場合では起動したCentOSのコンテナ内で”mongo“という名前でアクセスできるようになる。実際に見てみる。

■ 確認

CentOSのコンテナ内で確認してみる。

環境変数にいろいろと情報が入る。

[root@[CONTAINER_ID] /]# env | grep MONGO
MONGO_ENV_MONGO_MAJOR=3.0
MONGO_PORT=tcp://172.17.0.1:27017
MONGO_ENV_MONGO_VERSION=3.0.3
MONGO_PORT_27017_TCP=tcp://172.17.0.1:27017
MONGO_PORT_27017_TCP_PROTO=tcp
MONGO_PORT_27017_TCP_ADDR=172.17.0.1
MONGO_NAME=/determined_archimedes/mongo
MONGO_PORT_27017_TCP_PORT=27017
[root@[CONTAINER_ID] /]# 

またhostsファイルにも入るようだ。

[root@[CONTAINER_ID] /]# cat /etc/hosts
  :
172.17.0.1    mongo 92c264d2de93 berserk_brown
  :
[root@[CONTAINER_ID] /]#

MongoDBのクライアントを入れても試してみる。

[root@[CONTAINER_ID] /]# yum install epel-release
 :
[root@[CONTAINER_ID] /]# yum install mongodb
 :
[root@[CONTAINER_ID] /]# mongo --host mongo
MongoDB shell version: 2.4.14
connecting to: mongo:27017/test
Welcome to the MongoDB shell.
>

アクセスできた。

以上。

■ 関連