はじめに
Docker は、アプリケーションの構築、デプロイ、管理方法を革命的なものにしました。この過程において、Docker コンテナ間のネットワークトラフィックを理解し、管理することは、アプリケーションインフラストラクチャの信頼性、拡張性、セキュリティを確保するために重要です。このチュートリアルでは、Docker ネットワーキングの基本概念を解説し、コンテナを接続する実用的な手順を提供し、コンテナ間のネットワークトラフィックを効果的に管理するための戦略を探ります。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
Docker は、アプリケーションの構築、デプロイ、管理方法を革命的なものにしました。この過程において、Docker コンテナ間のネットワークトラフィックを理解し、管理することは、アプリケーションインフラストラクチャの信頼性、拡張性、セキュリティを確保するために重要です。このチュートリアルでは、Docker ネットワーキングの基本概念を解説し、コンテナを接続する実用的な手順を提供し、コンテナ間のネットワークトラフィックを効果的に管理するための戦略を探ります。
Docker は、開発者がアプリケーションとその依存関係を分離されたコンテナにパッケージ化できるコンテナ化プラットフォームです。これらのコンテナは、異なる環境で簡単にデプロイ、スケール、管理することができます。Docker の重要な側面の 1 つは、そのネットワーキング機能であり、これによりコンテナ間および外部世界との通信が可能になります。
Docker は、コンテナが相互に通信し、ホストシステムと通信できるようにするいくつかのネットワーキングドライバを提供します。デフォルトのネットワーキングドライバは bridge
で、これはホストシステム上に仮想ブリッジを作成し、コンテナに IP アドレスを割り当てます。同じブリッジネットワークに接続されたコンテナは、IP アドレスまたはコンテナ名を使用して相互に通信できます。
その他のネットワーキングドライバには、host
、overlay
、macvlan
があり、それぞれ独自のユースケースと設定があります。
以下のコマンドを使用して Docker ネットワークを管理できます。
コマンド | 説明 |
---|---|
docker network create |
新しいネットワークを作成する |
docker network ls |
すべてのネットワークを一覧表示する |
docker network inspect |
ネットワークを調査する |
docker network connect |
コンテナをネットワークに接続する |
docker network disconnect |
コンテナをネットワークから切断する |
たとえば、新しいブリッジネットワークを作成し、コンテナをそれに接続するには、次のようにします。
## Create a new bridge network
docker network create my-network
## Connect a container to the network
docker run -d --name my-container --network my-network nginx
Docker ネットワーキングの基本を理解することは、コンテナ間のネットワークトラフィックを管理し、Docker ベースのアプリケーション内で安全な通信を確保するために重要です。
Docker ネットワーキングの基本を理解したら、Docker コンテナを接続する方法を探ってみましょう。
Docker コンテナを接続する最も簡単な方法は、それらを同じネットワークに配置することです。コンテナが同じネットワーク上にある場合、コンテナ名または IP アドレスを使用して相互に通信することができます。
同じネットワーク上のコンテナを接続するには、新しいコンテナを起動するときに --network
フラグを使用できます。
## Create a new bridge network
docker network create my-network
## Start a container and connect it to the network
docker run -d --name container1 --network my-network nginx
## Start another container and connect it to the same network
docker run -d --name container2 --network my-network nginx
これで、2 つのコンテナはコンテナ名(例: container1
、container2
)または IP アドレスを使用して相互に通信することができます。
場合によっては、異なるネットワーク間のコンテナを接続する必要があるかもしれません。これは、--link
フラグを使用するか、ネットワークオーバーレイを作成することで実現できます。
--link
フラグを使用する場合:
## Create two networks
docker network create network1
docker network create network2
## Start a container in network1
docker run -d --name container1 --network network1 nginx
## Start a container in network2 and link it to container1
docker run -d --name container2 --network network2 --link container1 nginx
これで、container2
は container1
のホスト名を使用して container1
にアクセスできます。
ネットワークオーバーレイを使用して異なるネットワーク間のコンテナを接続する場合:
## Create an overlay network
docker network create --driver overlay my-overlay-network
## Start a container in the overlay network
docker run -d --name container1 --network my-overlay-network nginx
## Start another container in the same overlay network
docker run -d --name container2 --network my-overlay-network nginx
同じオーバーレイネットワークに接続されたコンテナは、異なる Docker ホスト上にあっても直接通信することができます。
同じネットワーク上または異なるネットワーク間で Docker コンテナを接続する方法を理解することは、ネットワークトラフィックを管理し、コンテナ化されたアプリケーション間の通信を可能にするために不可欠です。
これで Docker コンテナの接続方法を理解したので、コンテナ間のネットワークトラフィックを管理する方法を探ってみましょう。
Docker コンテナで実行されているサービスに外部からアクセスできるようにするには、コンテナのポートをホストシステムに公開する必要があります。これは、コンテナを起動するときに -p
または --publish
フラグを使用して行うことができます。
## Expose port 80 of the container to port 8080 on the host
docker run -d --name my-web-app -p 8080:80 nginx
これで、ホストシステムで http://localhost:8080
にアクセスすることで、コンテナ内で実行されている Nginx ウェブサーバーにアクセスできます。
同じコンテナ化アプリケーションの複数のインスタンスがある場合、ロードバランシングを使用してコンテナ間でネットワークトラフィックを分散することができます。これは、ホストシステム上で実行されている Nginx や HAProxy などのロードバランサーサービスを使用して実現できます。
Docker は、コンテナ間のネットワークトラフィックを制御できるネットワークポリシーをサポートしています。ネットワークポリシーを使用すると、特定のコンテナまたはコンテナグループ間の通信を制限または許可することができます。
たとえば、特定のコンテナのみがデータベースコンテナにアクセスできるようにするネットワークポリシーを作成するには、次のようにします。
## Create a network policy
docker network create --driver=bridge --subnet=172.18.0.0/16 my-network
docker network policy create --ingress --allow-from-container=web-app my-network database
この例では、web-app
コンテナは database
コンテナにアクセスできますが、my-network
ネットワーク上の他のコンテナはアクセスできません。
相互に通信する必要がある複数のコンテナがある場合、サービスディスカバリーを使用してプロセスを簡素化することができます。サービスディスカバリーにより、コンテナは IP アドレスやコンテナ名に依存するのではなく、名前で他のサービスを見つけて接続することができます。
サービスディスカバリーを実装する 1 つの方法は、Consul や Zookeeper などのサービスレジストリを使用することです。これらは Docker 環境と統合することができます。
Docker コンテナ間のネットワークトラフィックを管理することは、コンテナ化アプリケーション内で安全かつ効率的な通信を確保するために重要です。ポートの公開、ロードバランシング、ネットワークポリシー、サービスディスカバリーなどの概念を理解することで、Docker ベースのインフラストラクチャ内のネットワークトラフィックを効果的に制御および最適化することができます。
この包括的なチュートリアルでは、Docker コンテナ間のネットワークトラフィックを管理する技術を習得する方法を学びます。Docker ネットワーキングの基本を理解し、コンテナをシームレスに接続し、効果的なトラフィック管理技術を実装することで、Docker ベースのアプリケーションのパフォーマンスと信頼性を最適化することができます。経験豊富な Docker ユーザーであろうと、コンテナ化の旅を始めたばかりの人であろうと、このガイドはあなたの Docker ネットワーキングを次のレベルに引き上げるために必要な知識とスキルを身に付けることができます。