Docker コンテナのネットワーク設定をどのように構成するか

DockerDockerBeginner
オンラインで実践に進む

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

はじめに

Docker は、アプリケーションをコンテナ化するための人気のあるプラットフォームになっていますが、Docker コンテナのネットワーク設定を管理することは、デプロイの重要な側面になり得ます。このチュートリアルでは、基本的なものから高度なネットワーク管理テクニックまで、Docker コンテナのネットワーク設定を構成するプロセスを案内します。

Docker ネットワークの紹介

Docker は、開発者がアプリケーションとその依存関係をコンテナと呼ばれるポータブルで独立したユニットにパッケージ化できる人気のあるコンテナ化プラットフォームです。Docker の重要な側面の 1 つは、コンテナ同士や外部世界と通信できるようにするネットワーク管理機能です。

Docker ネットワークの理解

Docker は、コンテナのネットワーキング動作を構成できるいくつかのネットワークドライバを提供します。デフォルトのネットワークドライバは「bridge」で、ホストマシン上に仮想ブリッジを作成し、ブリッジネットワーク内で各コンテナに一意の IP アドレスを割り当てます。その後、コンテナはこの IP アドレスを使用して互いに通信できます。

graph LR A[Host Machine] --> B[Docker Bridge Network] B --> C[Container 1] B --> D[Container 2] B --> E[Container 3]

「bridge」ドライバに加えて、Docker は「host」、「overlay」、「macvlan」などの他のネットワークドライバもサポートしており、それぞれ独自のユースケースと構成オプションがあります。

Docker ネットワーク名前空間

Docker は、各コンテナのネットワークスタックを隔離するためにネットワーク名前空間を使用します。これは、各コンテナが独自のネットワークインターフェイス、IP アドレス、ルーティングテーブルのセットを持ち、ホストマシンや他のコンテナとは別であることを意味します。

graph LR A[Host Network Namespace] --> B[Container 1 Network Namespace] A --> C[Container 2 Network Namespace] A --> D[Container 3 Network Namespace]

ネットワーク名前空間を理解することは、Docker ネットワーク構成の管理とトラブルシューティングにとって重要です。

Docker ネットワークコマンド

Docker は、コンテナのネットワーク設定を管理および構成するためのコマンドのセットを提供します。最も一般的に使用されるコマンドのいくつかには、以下が挙げられます。

  • docker network create:新しい Docker ネットワークを作成する
  • docker network connect:コンテナをネットワークに接続する
  • docker network disconnect:コンテナをネットワークから切断する
  • docker network inspect:Docker ネットワークの詳細を調べる

これらのコマンドを使用すると、Docker コンテナのネットワーク設定をカスタマイズし、必要に応じて互いや外部世界と通信できるようにすることができます。

Docker ネットワーク設定の構成

ネットワークドライバの選択

Docker ネットワークを作成する際、必要に応じて適切なネットワークドライバを選択する必要があります。以下は、最も一般的なネットワークドライバとそのユースケースです。

ネットワークドライバ ユースケース
bridge デフォルトのネットワークドライバで、同じホスト上のコンテナを接続するのに適しています。
host コンテナとホスト間のネットワーク隔離を解除し、コンテナがホストのネットワークスタックを使用できるようにします。
overlay 複数の Docker ホストにまたがるコンテナ間の通信を可能にし、スワームベースのアプリケーションを構築するのに役立ちます。
macvlan コンテナに MAC アドレスを割り当て、ホスト上の物理的なネットワークデバイスとして表示されるようにします。

Docker ネットワークの作成と接続

新しい Docker ネットワークを作成するには、docker network createコマンドを使用します。

docker network create my-network

その後、docker runコマンドまたはdocker network connectコマンドを使用してコンテナをネットワークに接続できます。

## 作成時にコンテナを接続する
docker run -d --name my-container --network my-network nginx

## 既存のコンテナを接続する
docker network connect my-network my-container

ネットワーク設定の構成

コンテナがネットワークに接続されたら、次のようなさまざまなネットワーク設定を構成できます。

  • IP アドレス--ipまたは--ip6フラグを使用して、コンテナに特定の IP アドレスを割り当てます。
  • DNS--dnsフラグを使用して、コンテナ用のカスタム DNS サーバを設定します。
  • ポートマッピング-pまたは-Pフラグを使用して、コンテナポートをホストポートにマッピングします。
## 特定のIPアドレスを割り当てる
docker run -d --name my-container --network my-network --ip 172.18.0.100 nginx

## カスタムDNSサーバを設定する
docker run -d --name my-container --network my-network --dns 8.8.8.8 --dns 8.8.4.4 nginx

## コンテナポートをホストポートにマッピングする
docker run -d --name my-container --network my-network -p 80:80 nginx

これらのネットワーク設定を構成することで、Docker コンテナ同士や外部世界との通信方法を制御できます。

高度な Docker ネットワーク管理

オーバレイネットワークを使ったマルチホストネットワーキング

Docker Swarm クラスタなどのマルチホスト環境で Docker を使用する場合、異なるホスト間のコンテナ間通信を可能にするために、「overlay」ネットワークドライバを使用できます。「overlay」ネットワークは、Swarm の組み込みのサービス検出と負荷分散機能を利用して、コンテナ間通信を円滑に行います。

Docker Swarm で「overlay」ネットワークを作成するには、次のコマンドを使用します。

docker network create --driver overlay my-overlay-network

その後、他の Docker ネットワークと同じように、コンテナを「overlay」ネットワークに接続できます。

graph LR A[Host 1] --> B[Container 1] A --> C[Container 2] D[Host 2] --> E[Container 3] D --> F[Container 4] B --> F C --> E subgraph Overlay Network B C E F end

ネットワークプラグインと拡張機能

Docker は、コンテナのネットワーキング機能を強化するために使用できる幅広いネットワークプラグインと拡張機能をサポートしています。これらのプラグインは、ネットワーク暗号化、負荷分散、外部ネットワーキングソリューションとの統合などの機能を提供します。

人気のあるネットワークプラグインのいくつかには、以下が挙げられます。

  • Calico:高度なネットワークポリシーとセキュリティ機能を提供します。
  • Weave Net:Docker コンテナ用のシンプルでセキュアなネットワーキングソリューションを提供します。
  • Contiv:Kubernetes と統合し、高度なネットワーキングとポリシー管理を提供します。

ネットワークプラグインを使用するには、Docker ホストにインストールしてから、プラグイン固有のドライバを使用してネットワークを作成します。

## Calicoネットワークを作成する
docker network create --driver calico my-calico-network

ネットワークのトラブルシューティング

Docker ネットワークを扱う際、ネットワークのトラブルシューティング技術をしっかり理解することが重要です。使用できる一般的なツールとコマンドのいくつかには、以下が挙げられます。

  • docker network inspect:接続されているコンテナとその IP アドレスを含む Docker ネットワークの詳細を調べます。
  • docker exec:実行中のコンテナ内でコマンドを実行し、ネットワーク接続性のテストに役立ちます。
  • tcpdump:ホストマシン上またはコンテナ内のネットワークトラフィックをキャプチャして分析します。
  • pingtelnet:コンテナ間またはコンテナとホスト間の基本的なネットワーク接続性をテストします。

これらの高度なネットワーク管理技術を身につけることで、Docker ベースのアプリケーションが高可用性、拡張性、セキュリティを備えていることを保証できます。

まとめ

このチュートリアルが終了するまでに、Docker コンテナのネットワーク設定をどのように構成するかを包括的に理解し、シームレスな接続性と向上したパフォーマンスのためにデプロイを最適化できるようになります。Docker ネットワーキングの基本を探求し、ネットワーク設定を構成する方法を学び、高度なネットワーク管理戦略に取り組んで、Docker のスキルを次のレベルに引き上げましょう。