4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Docker | Linking Containers #docker

Posted at

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

参照

Docker Official | Linking Containers Together

4
4
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
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?