Docker | Linking Containers #docker
概要
Docker の Containers のリンクについて。
Network port mapping refresher
- 49153 to 65535 の間でランダムにポート割り当て
$ sudo docker run -d -P training/webapp python app.py
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
69ce337d84ee training/webapp:latest "python app.py" 17 seconds ago Up 17 seconds 0.0.0.0:49154->5000/tcp evil_torvalds
$ curl http://localhost:49154
Hello world!
$ sudo docker port evil_torvalds 5000
0.0.0.0:49154
- 任意のポートを割り当て
$ sudo docker run -d -p 5000:5000 training/webapp python app.py
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
33c253754927 training/webapp:latest "python app.py" 4 seconds ago Up 3 seconds 0.0.0.0:5000->5000/tcp clever_carson
$ curl http://localhost:5000
Hello world!
$ sudo docker port clever_carson 5000
0.0.0.0:5000
Container naming
Naming
Link のためには、 コンテナの name が必要になる。
すでにみてきたように、デフォルトでコンテナに一意の名前が自動的に付与される。
--name
オプションを利用することで、自分で任意の名前を付けることも可能である。
$ sudo docker run -d -P --name hogehogehoge training/webapp python app.py
757338e884317b47f66350bcb5ba6335a7c6ddd2a1ae6be04ce5d471ac265703
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
757338e88431 training/webapp:latest "python app.py" 2 seconds ago Up 2 seconds 0.0.0.0:49156->5000/tcp hogehogehoge
docker inspect
docker inspect
コマンドでコンテナの名前を確認できます。
$ sudo docker run -d -P --name hogehogehoge training/webapp python app.py
757338e884317b47f66350bcb5ba6335a7c6ddd2a1ae6be04ce5d471ac265703
$ sudo docker inspect -f "{{ .Name }}" 757338e884317b47f66350bcb5ba6335a7c6ddd2a1ae6be04ce5d471ac265703
/hogehogehoge
$ sudo docker run -d -P training/webapp python app.py
c022b25a6f471412132bb56ad16f56e885d5e537c186a961e66bec75931ed0bc
$ sudo docker inspect -f "{{ .Name }}" c022b25a6f471412132bb56ad16f56e885d5e537c186a961e66bec75931ed0bc
/naughty_wilson
Container Linking
送り手のコンテナの起動時に、 --link
オプションを利用して受け手のコンテナの名前を指定することで、
コンテナをリンクすることができます。
# DB コンテナを起動
$ sudo docker run -d --name db training/postgres
# WEB コンテナを起動 (db:db は link先の名前:Alias)
$ sudo docker run -d -P --name web --link db:db training/webapp python app.py
# inspect でリンク設定を確認
$ sudo docker inspect -f "{{ .HostConfig.Links }}" web
[/db:/web/db]
Docker は送り手に対して二つの接続方法を用意しています。
以下に続く
- Environment Variables
/etc/hosts
です。
Environment Variables
Docker は --link
オプション使用時に自動的に 環境変数を追加します。
$ sudo docker run --rm --name web2 --link db:db training/webapp env
:
DB_PORT=tcp://db_sever_ip:5432
DB_PORT_5432_TCP=tcp://db_sever_ip:5432
DB_PORT_5432_TCP_ADDR=db_sever_ip
DB_PORT_5432_TCP_PORT=5432
DB_PORT_5432_TCP_PROTO=tcp
DB_NAME=/web2/db
DB_ENV_PG_VERSION=9.3
:
Updating the /etc/hosts
file
Docker は --link
オプション使用時に自動的に /etc/hosts
を更新します。
$ sudo docker run -t -i --rm --link db:db training/webapp /bin/bash
root@5a3f442ff902:/opt/webapp# cat /etc/hosts
: # 略
db_sever_ip db