LoginSignup
14
14

More than 5 years have passed since last update.

Dockerのリンク機能をつかってコンテナ間通信をしてみよう

Last updated at Posted at 2015-03-20

---2017.03.04追記---
docker runの --link機能はもうオワコンなので、本記事はもう役目を終えたようです。
---追記こまで---

例としてMongoDBをとりあげます。

MongoDBサーバコンテナとMongoDBクライアントコンテナを立ち上げて、クライアントからデーモンに接続してみましょう。

準備

dockerをインストールして、mongodbイメージを取得します。

docker pull mongo

このイメージにはデーモン用プログラム(/usr/bin/mongod)とクライアントプログラム(/usr/bin/mongo)が両方入っているのでそれを確認します。

Mongoクライアント

[vagrant@localhost ~]$ docker run -it mongo  /usr/bin/mongo --version
MongoDB shell version: 3.0.0

Mongoサーバ

[vagrant@localhost ~]$ docker run -it mongo  /usr/bin/mongod --version
db version v3.0.0
git version: a841fd6394365954886924a35076691b4d149168
OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013

MongoDBサーバコンテナを起動する

mongoserverというコンテナ名でMongoサーバを起動します。

$ docker run -d  --name mongoserver mongo

MongoDBクライアントコンテナを起動する

mongocというコンテナ名でMongoクライアントを起動します。
このとき、--linkオプションを使って通信相手先(Mongoサーバ)のホスト名を注入します。

$ docker run -it --link mongoserver:mongoserver mongo bash
root@f986fdc303bb:/#

mongocコンテナ内の/etc/hostsを見てみましょう。

root@f986fdc303bb:/# cat /etc/hosts
172.17.0.45     f986fdc303bb
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.44     mongoserver

172.17.0.41 mongoserverという行が出現しています。
これが、--link機能が用意してくれたホスト名です。

mongoserverにpingを飛ばしてみましょう。

root@f986fdc303bb:/# ping mongoserver
PING mongoserver (172.17.0.44): 48 data bytes
56 bytes from 172.17.0.44: icmp_seq=0 ttl=64 time=0.097 ms
56 bytes from 172.17.0.44: icmp_seq=1 ttl=64 time=0.090 ms
56 bytes from 172.17.0.44: icmp_seq=2 ttl=64 time=0.213 ms

pingが通りました!

環境変数も見てみましょう。

root@f986fdc303bb:/# env
MONGOSERVER_ENV_MONGO_VERSION=3.0.0
HOSTNAME=f986fdc303bb
MONGO_VERSION=3.0.0
TERM=xterm
MONGOSERVER_PORT_27017_TCP=tcp://172.17.0.44:27017
MONGOSERVER_PORT=tcp://172.17.0.44:27017
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
MONGOSERVER_ENV_MONGO_MAJOR=3.0
MONGOSERVER_NAME=/nostalgic_bell/mongoserver
HOME=/root
SHLVL=1
MONGO_MAJOR=3.0
MONGOSERVER_PORT_27017_TCP_PORT=27017
MONGOSERVER_PORT_27017_TCP_PROTO=tcp
MONGOSERVER_PORT_27017_TCP_ADDR=172.17.0.44
_=/usr/bin/env

MONGOSERVER_ではじまる環境変数がいくつかセットされています。

さて、MongoクライアントからMongoサーバにMongoプロトコルで接続してみましょう。

root@f986fdc303bb:/# mongo --host mongoserver
MongoDB shell version: 3.0.0
connecting to: mongoserver:27017/test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        http://docs.mongodb.org/
Questions? Try the support group
        http://groups.google.com/group/mongodb-user
Server has startup warnings:
2015-03-20T02:15:15.071+0000 I CONTROL  [initandlisten]
2015-03-20T02:15:15.071+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2015-03-20T02:15:15.071+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2015-03-20T02:15:15.071+0000 I CONTROL  [initandlisten]

接続できました!

このあと、コレクションにドキュメントを保存して、それがサーバコンテナにちゃんと保存されているか確認したら、ちゃんとできていました。

参考

14
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14