はじめに
この実験では、docker network connect コマンドを使用してコンテナネットワークを効果的に管理する方法を学びます。実行中のコンテナを既存のネットワークに接続する方法、コンテナの初期起動時にネットワークに接続する方法、ネットワーク上のコンテナに静的 IP アドレスを指定する方法、およびコンテナ間の通信を容易にするためのネットワークエイリアスを作成する方法を探索します。
実践的な演習を通じて、コンテナネットワーク構成を操作する実践的な経験を積み、より堅牢で相互接続された Docker 化アプリケーションを構築できるようになります。
実行中のコンテナをネットワークに接続する
このステップでは、実行中の Docker コンテナを既存のネットワークに接続する方法を学びます。これは、すでに実行中のコンテナがあり、特定のネットワーク上の他のコンテナやサービスと通信させる必要がある場合に便利です。
まず、このデモンストレーションに使用する新しいネットワークを作成しましょう。my-network という名前のブリッジネットワークを作成します。
docker network create my-network
ネットワークが正常に作成されたことを示す、以下のような出力が表示されるはずです。
<network_id>
次に、最初は my-network に接続されていない単純なコンテナを実行しましょう。alpine コンテナをデタッチドモード (-d) で実行し、my-container という名前を付けます。
docker run -d --name my-container alpine sleep infinity
出力はコンテナ ID になります。
<container_id>
コンテナが実行中で my-network に接続されていないことを確認するには、コンテナのネットワーク設定を調べることができます。
docker inspect my-container --format '{{json .NetworkSettings.Networks}}'
出力にはデフォルトのブリッジネットワークが表示されますが、my-network は表示されません。
{
"bridge": {
"IPAMData": null,
"IPAddress": "<ip_address>",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "<mac_address>",
"DriverOpts": null
}
}
次に、docker network connect コマンドを使用して、実行中の my-container を my-network に接続しましょう。
docker network connect my-network my-container
コマンドが成功すると、出力は表示されません。
コンテナが my-network に接続されたことを確認するには、再度コンテナのネットワーク設定を調べます。
docker inspect my-container --format '{{json .NetworkSettings.Networks}}'
今度は、出力にデフォルトのブリッジネットワークと my-network の両方が表示されるはずです。
{
"bridge": {
"IPAMData": null,
"IPAddress": "<ip_address>",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "<mac_address>",
"DriverOpts": null
},
"my-network": {
"IPAMData": null,
"IPAddress": "<ip_address>",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "<mac_address>",
"DriverOpts": null
}
}
最後に、作成したコンテナとネットワークをクリーンアップしましょう。
docker stop my-container
docker rm my-container
docker network rm my-network
コンテナ起動時にネットワークに接続する
このステップでは、Docker コンテナを起動する際に特定のネットワークに接続する方法を学びます。これは、コンテナを最初から正しいネットワークに接続するための最も一般的な方法です。
まず、使用する app-network という名前の新しいネットワークを作成しましょう。
docker network create app-network
ネットワークが正常に作成されたことを示す、以下のような出力が表示されるはずです。
<network_id>
次に、単純な nginx コンテナを実行し、起動時に直接 app-network に接続します。--network フラグに続けてネットワーク名を指定します。また、デタッチドモード (-d) で実行し、web-server という名前を付けます。
docker run -d --name web-server --network app-network nginx
出力はコンテナ ID になります。
<container_id>
コンテナが app-network に接続されていることを確認するには、コンテナのネットワーク設定を調べることができます。
docker inspect web-server --format '{{json .NetworkSettings.Networks}}'
出力には、コンテナが app-network に接続されていることが表示されるはずです。
{
"app-network": {
"IPAMData": null,
"IPAddress": "<ip_address>",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "<mac_address>",
"DriverOpts": null
}
}
今回は、docker run コマンドでネットワークを指定したため、コンテナはデフォルトのブリッジネットワークではなく、app-network のみに接続されていることに注意してください。
最後に、コンテナとネットワークをクリーンアップしましょう。
docker stop web-server
docker rm web-server
docker network rm app-network
ネットワーク上のコンテナに IP アドレスを指定する
このステップでは、コンテナをネットワークに接続する際に、特定の静的 IP アドレスを割り当てる方法を学びます。デフォルトでは、Docker はネットワークのサブネットから動的に IP アドレスを割り当てます。ただし、場合によっては、コンテナに予測可能な IP アドレスが必要になることがあります。
まず、指定されたサブネットを持つ新しいネットワークを作成しましょう。サブネット 172.20.0.0/16 を持つ static-net という名前のブリッジネットワークを作成します。
docker network create --subnet 172.20.0.0/16 static-net
ネットワークが正常に作成されたことを示す、以下のような出力が表示されるはずです。
<network_id>
次に、alpine コンテナを実行し、static-net に接続します。--ip フラグを使用して静的 IP アドレスを指定します。IP アドレス 172.20.0.10 を割り当てます。デタッチドモード (-d) で実行し、static-ip-container という名前を付けます。
docker run -d --name static-ip-container --network static-net --ip 172.20.0.10 alpine sleep infinity
出力はコンテナ ID になります。
<container_id>
コンテナが static-net 上で割り当てられた静的 IP アドレスを持っていることを確認するには、コンテナのネットワーク設定を調べます。
docker inspect static-ip-container --format '{{json .NetworkSettings.Networks}}'
出力には、指定された IP アドレスで static-net に接続されたコンテナが表示されるはずです。
{
"static-net": {
"IPAMData": null,
"IPAddress": "172.20.0.10",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "<mac_address>",
"DriverOpts": null
}
}
最後に、コンテナとネットワークをクリーンアップしましょう。
docker stop static-ip-container
docker rm static-ip-container
docker network rm static-net
コンテナのネットワークエイリアスを作成する
このステップでは、コンテナのネットワークエイリアスを作成する方法を学びます。ネットワークエイリアスは、同じネットワーク上の他のコンテナがコンテナを解決して接続するために使用できる代替名を提供します。これは、Docker ネットワーク内のサービス検出に役立ちます。
まず、alias-network という名前の新しいネットワークを作成しましょう。
docker network create alias-network
ネットワークが正常に作成されたことを示す、以下のような出力が表示されるはずです。
<network_id>
次に、nginx コンテナを実行し、alias-network に接続します。--network-alias フラグを使用してネットワークエイリアスを割り当てます。エイリアス web を割り当てます。デタッチドモード (-d) で実行し、alias-container という名前を付けます。
docker run -d --name alias-container --network alias-network --network-alias web nginx
出力はコンテナ ID になります。
<container_id>
コンテナがネットワークエイリアスを持っていることを確認するには、コンテナのネットワーク設定を調べます。
docker inspect alias-container --format '{{json .NetworkSettings.Networks}}'
出力には、alias-network に接続されたコンテナとネットワークエイリアスが表示されるはずです。
{
"alias-network": {
"IPAMData": null,
"IPAddress": "<ip_address>",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "<mac_address>",
"Aliases": ["web", "alias-container"],
"DriverOpts": null
}
}
出力の "Aliases":["web","alias-container"] の部分に注目してください。Docker は自動的にコンテナ名もエイリアスとして追加します。
次に、同じネットワーク上に別のコンテナを実行し、ネットワークエイリアス web を使用して alias-container に ping を送信してみましょう。alias-network 上で alpine コンテナを対話的に (-it) 実行します。
docker run -it --rm --network alias-network alpine ping -c 3 web
エイリアス web を使用して alias-container に ping が成功したことを示す出力が表示されるはずです。
PING web (<ip_address>): 56 data bytes
64 bytes from <ip_address>: seq=0 ttl=64 time=0.xxx ms
64 bytes from <ip_address>: seq=1 ttl=64 time=0.xxx ms
64 bytes from <ip_address>: seq=2 ttl=64 time=0.xxx ms
--- web ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.xxx/0.xxx/0.xxx/0.xxx ms
これは、同じネットワーク上のコンテナがネットワークエイリアスを使用して相互に解決し、通信できることを示しています。
最後に、コンテナとネットワークをクリーンアップしましょう。
docker stop alias-container
docker rm alias-container
docker network rm alias-network
まとめ
この実験では、docker network connect コマンドを使用して Docker コンテナネットワークを管理する方法を学びました。実行中のコンテナを既存のネットワークに接続する練習を行い、コンテナを起動した後に動的にネットワーク接続を追加する方法を実証しました。
さらに、コンテナを作成する際に特定のネットワークに接続する方法、ネットワーク上のコンテナに静的 IP アドレスを指定する方法、およびネットワーク内でコンテナに代替名を提供するためのネットワークエイリアスを作成する方法を探索しました。これにより、コンテナ間の検出可能性と通信が向上します。



