はじめに
Docker はアプリケーションをコンテナ化するための強力なツールですが、コンテナ間のネットワーク接続を管理することは、チャレンジとなる場合があります。このチュートリアルでは、カスタム Docker ネットワークを作成し、コンテナをそれに接続する方法を学びます。これにより、コンテナは安全かつ効率的に通信できるようになります。
Docker ネットワークの概要
Docker ネットワークは、Docker エコシステムの重要なコンポーネントであり、コンテナ同士や外部の世界と通信できるようにします。Docker のコンテキストでは、ネットワークは、コンテナが接続し、データを交換するための仮想ネットワークです。Docker は、それぞれ固有の機能とユースケースを持つ、いくつかの組み込みネットワークドライバを提供しています。
最も一般的に使用される Docker ネットワークドライバは次のとおりです。
- ブリッジネットワーク: Docker のデフォルトのネットワークドライバで、ホストマシン上に仮想ブリッジを作成し、コンテナ同士やホストと通信できるようにします。
- ホストネットワーク: このネットワークモードでは、コンテナがホストのネットワークスタックを使用できます。これにより、コンテナとホスト間のネットワーク分離が効果的に取り除かれます。
- オーバーレイネットワーク: このネットワークドライバはマルチホストネットワークに使用され、異なる Docker ホスト上で実行されているコンテナが互いに通信できるようにします。
- Macvlan ネットワーク: このネットワークドライバを使用すると、コンテナに MAC アドレスを割り当てることができ、ネットワーク上の物理デバイスとして表示されます。
これらのネットワークドライバとそのユースケースを理解することは、Docker 環境でコンテナを効果的に管理および接続するために不可欠です。
graph LR
A[Dockerホスト] --> B[ブリッジネットワーク]
B --> C[コンテナ1]
B --> D[コンテナ2]
B --> E[コンテナ3]
表 1:一般的な Docker ネットワークドライバ
| ドライバ | 説明 |
|---|---|
| ブリッジ | ホストマシン上に仮想ブリッジを作成する、デフォルトのネットワークドライバ。 |
| ホスト | コンテナがホストのネットワークスタックを使用できるようにし、ネットワーク分離を取り除きます。 |
| オーバーレイ | 異なる Docker ホスト上で実行されているコンテナが通信できるようにする、マルチホストネットワークを有効にします。 |
| Macvlan | コンテナに MAC アドレスを割り当て、ネットワーク上の物理デバイスとして表示します。 |
さまざまなネットワークドライバとそのユースケースを理解することで、Docker 環境でコンテナを効果的に接続および管理できます。
カスタム Docker ネットワークの作成
Docker が提供するデフォルトのネットワークドライバに加えて、独自の Docker ネットワークを作成して、特定の要件に合わせて調整することもできます。カスタムネットワークを作成することで、コンテナ間のネットワーク設定と分離をより細かく制御できます。
カスタムブリッジネットワークの作成
カスタムブリッジネットワークを作成するには、docker network createコマンドを使用できます。以下に例を示します。
docker network create my-custom-network
このコマンドは、my-custom-network という名前の新しいブリッジネットワークを作成します。その後、docker network inspectコマンドを使用してネットワークを調べることができます。
docker network inspect my-custom-network
出力には、ネットワークに関する詳細(サブネット、ゲートウェイ、ネットワークに接続されているコンテナの一覧など)が表示されます。
カスタムブリッジネットワークの設定
カスタムブリッジネットワークを作成する際に、サブネットやゲートウェイなどの追加の設定オプションを指定することもできます。以下に例を示します。
docker network create --subnet 172.18.0.0/16 --gateway 172.18.0.1 my-custom-network
このコマンドは、サブネット172.18.0.0/16とゲートウェイ172.18.0.1を持つカスタムブリッジネットワークを作成します。
コンテナをカスタムネットワークに接続する
カスタムネットワークを作成したら、新しいコンテナを起動する際に--networkオプションを使用して、コンテナをそれに接続できます。以下に例を示します。
docker run -d --name my-app --network my-custom-network nginx
このコマンドは、新しい Nginx コンテナを起動し、my-custom-networkカスタムネットワークに接続します。
カスタム Docker ネットワークを作成および使用することで、コンテナの分離性とセキュリティを向上させ、ネットワーク関連のタスクの管理を簡素化できます。
カスタムネットワークへのコンテナ接続
カスタム Docker ネットワークを作成したら、コンテナをそれに接続する方法を見ていきましょう。
作成時にコンテナを接続する
新しいコンテナを起動する際に、--networkオプションを使用して、接続するネットワークを指定できます。以下に例を示します。
docker run -d --name my-app --network my-custom-network nginx
このコマンドは、新しい Nginx コンテナを起動し、my-custom-networkカスタムネットワークに接続します。
既存のコンテナを接続する
既存のコンテナをカスタムネットワークに接続するには、docker network connectコマンドを使用できます。以下に例を示します。
docker run -d --name my-db mysql
docker network connect my-custom-network my-db
このコマンドは、最初に新しい MySQL コンテナを起動し、次にmy-dbコンテナをmy-custom-networkカスタムネットワークに接続します。
コンテナ接続の確認
コンテナがカスタムネットワークに接続されていることを確認するには、docker network inspectコマンドを使用できます。
docker network inspect my-custom-network
出力には、ネットワークに接続されているコンテナの一覧とそのカスタムネットワーク内での IP アドレスが表示されます。
また、コンテナ間の接続性をテストするために、カスタムネットワーク内のコンテナ名または IP アドレスを使用できます。たとえば、別のコンテナからpingできます。
docker exec my-app ping my-db
このコマンドは、コンテナ名(ホスト名として)を使用して、my-appコンテナからmy-dbコンテナに ping を送信します。
コンテナをカスタム Docker ネットワークに接続することで、アプリケーションの分離性とセキュリティを向上させ、ネットワーク関連のタスクの管理を簡素化できます。
まとめ
このチュートリアルを終了すると、カスタム Docker ネットワークを作成し、コンテナをそれに接続する方法をしっかりと理解しているはずです。この知識は、コンテナが互いに、および外部サービスと簡単に通信できる、より堅牢でスケーラブルな Docker ベースのアプリケーションを構築するのに役立ちます。



