Docker コンテナ間のネットワークトラフィックを管理する方法

DockerDockerBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Docker は、アプリケーションの構築、デプロイ、管理方法を革命的なものにしました。この過程において、Docker コンテナ間のネットワークトラフィックを理解し、管理することは、アプリケーションインフラストラクチャの信頼性、拡張性、セキュリティを確保するために重要です。このチュートリアルでは、Docker ネットワーキングの基本概念を解説し、コンテナを接続する実用的な手順を提供し、コンテナ間のネットワークトラフィックを効果的に管理するための戦略を探ります。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/attach("Attach to Container") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/start -.-> lab-411569{{"Docker コンテナ間のネットワークトラフィックを管理する方法"}} docker/stop -.-> lab-411569{{"Docker コンテナ間のネットワークトラフィックを管理する方法"}} docker/attach -.-> lab-411569{{"Docker コンテナ間のネットワークトラフィックを管理する方法"}} docker/exec -.-> lab-411569{{"Docker コンテナ間のネットワークトラフィックを管理する方法"}} docker/create -.-> lab-411569{{"Docker コンテナ間のネットワークトラフィックを管理する方法"}} docker/network -.-> lab-411569{{"Docker コンテナ間のネットワークトラフィックを管理する方法"}} end

Docker ネットワーキングの理解

Docker は、開発者がアプリケーションとその依存関係を分離されたコンテナにパッケージ化できるコンテナ化プラットフォームです。これらのコンテナは、異なる環境で簡単にデプロイ、スケール、管理することができます。Docker の重要な側面の 1 つは、そのネットワーキング機能であり、これによりコンテナ間および外部世界との通信が可能になります。

Docker ネットワーキングの基本

Docker は、コンテナが相互に通信し、ホストシステムと通信できるようにするいくつかのネットワーキングドライバを提供します。デフォルトのネットワーキングドライバは bridge で、これはホストシステム上に仮想ブリッジを作成し、コンテナに IP アドレスを割り当てます。同じブリッジネットワークに接続されたコンテナは、IP アドレスまたはコンテナ名を使用して相互に通信できます。

graph LR Host -- Bridge Network --> Container1 Host -- Bridge Network --> Container2 Container1 -- Communicate --> Container2

その他のネットワーキングドライバには、hostoverlaymacvlan があり、それぞれ独自のユースケースと設定があります。

Docker ネットワークコマンド

以下のコマンドを使用して 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 コンテナを接続する方法を探ってみましょう。

同じネットワーク上のコンテナを接続する

Docker コンテナを接続する最も簡単な方法は、それらを同じネットワークに配置することです。コンテナが同じネットワーク上にある場合、コンテナ名または IP アドレスを使用して相互に通信することができます。

graph LR Container1 -- Communicate --> Container2 Container1 -- Communicate --> Container3 Container2 -- Communicate --> Container3

同じネットワーク上のコンテナを接続するには、新しいコンテナを起動するときに --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 つのコンテナはコンテナ名(例: container1container2)または 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

これで、container2container1 のホスト名を使用して 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 などのロードバランサーサービスを使用して実現できます。

graph LR Host -- Load Balancer --> Container1 Host -- Load Balancer --> Container2 Host -- Load Balancer --> Container3

ネットワークポリシー

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 ネットワーキングを次のレベルに引き上げるために必要な知識とスキルを身に付けることができます。