---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]
接続できました!
このあと、コレクションにドキュメントを保存して、それがサーバコンテナにちゃんと保存されているか確認したら、ちゃんとできていました。