どうもキタです。
Docker のコンテナ同士を通信させたい場合
特殊なパターンを除いて、基本は同じブリッジネットワークに所属させることが重要になります。公式のドキュメントでも以下のように表記されています。
コンテナに --network を指定しなければ、コンテナはデフォルト・ブリッジ・ネットワークに接続(attach)します。これは関係のないスタックや、サービス、コンテナと通信可能になるため、リスクを引き起こします。
そこで本記事では、ユーザー定義のブリッジネットワークを作成し、
そのネットワーク上にコンテナを作成する方法を解説します。
結論から書くと以下コマンドで可能になります。
$ docker run -d --name <container_name> --network <network_name> <image>
例:$ docker run -d --name nginx-test --network my-test-network nginx:latest
では解説していきます。
1. ブリッジネットワークとは?
Docker のデフォルトネットワーク(bridge)はコンテナ間通信に使用できますが、
・IP アドレスが自動で変わりやすい
・名前解決ができないことがある
・複数サービスの管理がしにくい
など制限があります。
そのため、実務では、ユーザー自身が定義したブリッジネットワークを作成し、
そこへコンテナを配置することが一般的です。
2. ユーザー定義ブリッジネットワークを作成する
まずはネットワークを作成していきます👇
$ docker network create my-app-network
作成できたか確認します
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
60dd77f62acc bridge bridge local
d76900aeb699 host host local
f5ead9139809 my-app-network bridge local
my-app-network が表示されればOKです。
3. 特定のブリッジネットワーク上にコンテナを作成
それでは特定のブリッジネットワーク上にコンテナを作成して行きます。
コンテナ作成時には --network のオプションを付けます👇
$ docker run -d --name nginx-test --network my-test-network nginx:latest
これで nginx コンテナは
my-app-network に所属した状態で起動します。
4. ネットワーク設定の確認
以下で所属ネットワークを確認できます。👇
$ docker inspect nginx | grep -A 10 Networks
my-app-network が表示されていればOKです。
5. 既存のコンテナを後からネットワークに参加させる場合
ちなみに、「コンテナもう起動してるんだが(半ギレ)」という場合
すでに起動済みのコンテナでも追加することができます👇
$ docker network connect my-app-network nginx-test
コンテナは複数のブリッジネットワーク上を跨がせることが可能なため、
一度跨がせてから確認後、問題なければ
不要なネットワークから切り離します👇
$ docker network disconnect bridge nginx-test
この操作により、コンテナが複数ネットワークに跨る構成も可能になります。
6. まとめ
| コマンド | 内容 |
|---|---|
| $ docker network create | ブリッジネットワーク作成 |
| $ docker run --network | 特定のブリッジネットワークでコンテナ作成 |
| $ docker network connect | 既存コンテナをブリッジネットワークに追加 |
| $ docker network disconnect | 不要なブリッジネットワークからの切断 |
Docker を使った複数コンテナ構成では、ネットワーク設計は重要な基礎要素です。
少しでも参考になれば幸いです!!
ではでは~