docker --link --exposeの動きを理解する
dockerの--linkとかEXPOSEとか接続関係のコマンドがよくわからないので、動かしながら理解する。
参照: Dockerのネットワークの基礎
- --link 他のコンテナのポートにつなぐ
- --expose コンテナのポートを他のコンテナに晒す
- --publish コンテナのポートをホストのポートにマッピングする
試しに2台のcentosのコンテナを作って、 一台にはapacheをインストールし、もう一台からそのapacheの80番ポートを叩いてみる。 --publishについては言及しない。
コンテナの名前は以下
コンテナ名 | 役割 | exposeするポート | リンク |
---|---|---|---|
httpd | apacheサーバ | 80 | なし |
httpdclient | クライアント | なし | httpdコンテナにリンク |
apacheコンテナを作成する。(1台目)
# docker run --privileged -d --expose 80 --name httpd centos:centos7 /sbin/init
# docker exec -it httpd /bin/bash [root@a4522c59ed0c /]# [root@a4522c59ed0c /]# yum install httpd -y [root@a4522c59ed0c /]# systemctl enable httpd.service [root@a4522c59ed0c /]# systemctl start httpd.service [root@a4522c59ed0c /]# exit
一応確認
[root@centos001 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 25fcc3bcc9b8 centos:centos7 "/sbin/init" 44 seconds ago Up 43 seconds 80/tcp httpd
ただのcentosを作成する。(2台目)
# docker run --privileged -d --link httpd:httpd-alias --name httpdclient centos:centos7 /sbin/init
--linkはコンテナ名:エイリアス名というフォーマットで指定する。
一応起動していることを確認する。2台動いている。
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 44e11aeaea7c centos:centos7 "/sbin/init" 9 minutes ago Up 9 minutes httpdclient 25fcc3bcc9b8 centos:centos7 "/sbin/init" 14 minutes ago Up 14 minutes 80/tcp httpd
作成されたコンテナの環境変数は以下のように調べられる。 この環境変数を使えば、このコンテナからapacheのポートを晒しているホストにアクセスする方法がわかる。
# docker exec -it httpdclient env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=44e11aeaea7c HTTPD_ALIAS_PORT=tcp://172.17.0.20:80 HTTPD_ALIAS_PORT_80_TCP=tcp://172.17.0.20:80 HTTPD_ALIAS_PORT_80_TCP_ADDR=172.17.0.20 HTTPD_ALIAS_PORT_80_TCP_PORT=80 HTTPD_ALIAS_PORT_80_TCP_PROTO=tcp HTTPD_ALIAS_NAME=/httpdclient/httpd-alias container_uuid=44e11aea-ea7c-97ee-6c8f-e903929a981d HOME=/root
以下のように環境変数経由でアクセスする。
[root@44e11aeaea7c /]# curl -s http://$HTTPD_ALIAS_PORT_80_TCP_ADDR:$HTTPD_ALIAS_PORT_80_TCP_PORT/ | head -1
これでコンテナ同士をつなぐことができた。