この投稿では、Docker コンテナーをリンクする 3 つの方法を説明します。
ポートとポート バインディングを公開する
ポートを公開
この方法は、同じネットワークまたは docker ホスト内で使用されます。同じネットワーク上のコンテナは、公開されたポートを介して相互に通信でき、以下のいずれかの方法でポートを公開できます。
– Dockerfile に EXPOSE 80 (または必要な任意のポート) を入れて、コンテナのサービスがポート 80 で接続できることを Docker に伝えます。
– '–expose [ポート番号]' を使用して、 「run –expose [ポート番号]」による docker コンテナ:
# docker run --expose=[port number] test
ポートバインディング
この方法は、同じネットワークの外側で使用されます。定義されたポートを介して同じネットワーク外のコンテナーに通信できるようにするには、docker run で -p フラグを使用してポートを公開し、1 つ以上のポートを公開してマップするか、-P フラグを使用してすべての公開ポートとマップを公開する必要があります。それらを上位ポートに送信します。以下のいずれかの方法でポート移植を行うことができます:
- –expose で Dockerfile 経由でポートを公開します -P を付けて公開します 国旗。公開されたポートをランダムなポートで Docker ホストにバインドします。
-–expose で Dockerfile 経由でポートを公開します。 -p 21:21 で公開します フラグを使用すると、公開ポートが特定のポート 21 でゲスト 21 の Docker ホストにバインドされます。
– docker コンテナー実行コマンドでポートをバインドします。
# docker run -p [port number on docker host]:[port number on container]/tcp -p [port number on docker host]:[port number on container]/udp test
例:
# docker run -p 80:80/tcp -p 500:500/udp test
単一ホスト内の Unix ドメイン ソケット
単一ホスト内のコンテナー間で通信するには、同じソケットを使用して Linux で IPC メカニズムを使用できます。ホスト マシンで作成する必要があるボリュームを共有する Docker ホストから 2 つの Docker を開始します。
# docker run -d -it --name dvc1 -v /var/tmp:/host oraclelinux:7 /bin/bash # docker run -d -it --name dvc2 -v /var/tmp:/host oraclelinux:7 /bin/bash
上記のコマンドの後、コンテナ dvc1 と dvc2 は /var/tmp/SocketX としてソケットを使用できます 相互接続へ。
Docker リンク メカニズムを使用してコンテナ間のリンクを設定する
Docker は、環境変数を使用して親コンテナーから子コンテナーに情報を渡すことにより、2 つのコンテナー間にトンネルを作成できます。リンクを作成するには、–link を使用します フラグ:
# docker run -itd --name=[child container] --link [parent container] [child container image] /bin/bash
例:
-親コンテナのネットワークを確認:
# docker ps|grep dvc 7d5ad19de678 j_web:v1 "/bin/sh -c '/usr/bi…" 2 days ago Up 5 hours dvc1
# docker exec -it dvc1 /bin/bash # ifconfig eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:04 inet addr:172.17.0.4 Bcast:172.17.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
-2 つの新しいコンテナを親コンテナにリンクします:
# docker run -it --name dvc1_dup1 --rm --link dvc1 j_web:v1 /bin/bash
-リンクされたコンテナを調べます:
# docker inspect -f "{{ .HostConfig.Links }}" dvc1_dup1 [/dvc1:/dvc1_dup1/dvc1]
-新しいコンテナのホスト ファイルを確認します。親コンテナの情報が含まれています:
# docker exec -it dvc1_dup1 /bin/bash
[root@b56d465976bc /]# cat /etc/hosts 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.4 dvc1 7d5ad19de678 172.17.0.5 b56d465976bc [root@b56d465976bc /]#警告 :–link フラグは Docker のレガシー機能です。最終的に削除される可能性があります。どうしても使い続ける必要がある場合を除き、–link を使用する代わりに、ユーザー定義ネットワークを使用して 2 つのコンテナー間の通信を容易にすることをお勧めします。ユーザー定義ネットワークがサポートしていない、–link で実行できる機能の 1 つは、コンテナー間で環境変数を共有することです。ただし、ボリュームなどの他のメカニズムを使用して、より制御された方法でコンテナ間で環境変数を共有できます。