GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

Docker の基本 – ポート、ポート バインディング、Docker リンクを公開する

この投稿では、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 つは、コンテナー間で環境変数を共有することです。ただし、ボリュームなどの他のメカニズムを使用して、より制御された方法でコンテナ間で環境変数を共有できます。


Docker
  1. Dockerコンテナをエクスポートおよびインポートする方法

  2. podmanとdockerの違い。

  3. Docker(およびLinuxコンテナー)とは何ですか?

  1. DockerでのPostgreSQLの実行、クイックで実用的なガイド

  2. Dockerを使用する時期と理由

  3. UbuntuにDockerとWordPressをインストールする

  1. Ubuntu で実行されているポートとプロセスを確認する

  2. Docker ポート マッピングについて

  3. 他のアプリケーションがポート 80 および 443 にバインドできないようにする