はじめに
Dockerはコンテナの管理だけでなく、コンテナ間の通信や外部ネットワークとの接続も制御できます。
本記事では、Dockerのネットワークの基本と主要なモードを解説します。
適切なネットワーク設定を行うことで、セキュリティやパフォーマンスを最適化できます。
書こうと思ったきっかけ
Dockerを使うと「コンテナ同士が通信できない」「ホストとの接続方法がわからない」といった問題に直面しがちです。
特にクラウド環境では、ネットワーク設定ミスが原因で動かないことも。
本記事では、これらの課題を解決するために、Dockerネットワークの基本をわかりやすくまとめました。
Dockerコンテナのネットワークについて
Dockerコンテナ内のネットワークは、コンテナ同士の通信やホストとの接続を管理する重要な仕組みです。以下に、基本的な概念と主要なネットワークモードを説明します。
1. Dockerのネットワークの基本
Dockerでは、コンテナ同士の通信やホストとの接続を管理するために、以下のようなネットワークモードが提供されています。
- ブリッジ(Bridge)
- ホスト(Host)
- オーバーレイ(Overlay)
- マックブラン(Macvlan)
- コンテナ間(Container)
2. Dockerの主要なネットワークモード
① Bridge(ブリッジ)ネットワーク
- デフォルトのネットワークモードで、スタンドアロンのコンテナに適している。
- Dockerが自動的に
docker0
という仮想ブリッジを作成し、コンテナがそこに接続する。 - コンテナ間通信は、ブリッジ内のコンテナ同士で可能。
-
外部からのアクセスは
-p
オプションでポートをマッピングすることで実現。
例:
docker network create my_bridge
docker run -d --name container1 --network my_bridge nginx
docker run -d --name container2 --network my_bridge alpine sleep 1000
② Host(ホスト)ネットワーク
- コンテナがホストと同じネットワークを共有する。
-
-p
オプションを使わなくても、コンテナが直接ホストのポートを使用可能。 - ただし、他のコンテナとの分離がないためセキュリティ面では注意が必要。
例:
docker run --rm --network host nginx
→ Nginxがホストのネットワークで直接起動する。
③ Overlay(オーバーレイ)ネットワーク
- Docker SwarmやKubernetesなどのクラスタ環境で使用される。
- 複数のDockerホスト間でコンテナ同士が通信できるように仮想ネットワークを作成する。
- 分散アーキテクチャに適している。
例:
docker network create -d overlay my_overlay
④ Macvlan(マックブラン)ネットワーク
- コンテナに直接物理ネットワークのIPアドレスを割り当てる。
- コンテナがホストとは別の独立したデバイスのように振る舞う。
- LAN内の他のデバイスからもアクセス可能。
例:
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 my_macvlan
⑤ Container(コンテナ間)ネットワーク
- 別のコンテナのネットワークスタックを共有するモード。
-
--network container:<コンテナ名>
を指定すると、そのコンテナのネットワークに直接接続できる。
例:
docker run -d --name main_container nginx
docker run -d --network container:main_container alpine sleep 1000
3. コンテナ間通信の方法
① 同じブリッジネットワーク内での通信
docker network create my_bridge
で独自のネットワークを作成し、そのネットワーク内のコンテナはコンテナ名で通信可能。
例:
docker network create my_bridge
docker run -d --name web --network my_bridge nginx
docker run -it --network my_bridge alpine sh
その後、Alpineコンテナ内で curl web
を実行すると、Nginxのレスポンスが得られる。
② Docker Composeを使ったネットワーク
Docker Composeを使うと、コンテナを自動的に同じネットワーク内に配置できる。
docker-compose.yml:
version: '3'
services:
web:
image: nginx
networks:
- my_network
app:
image: alpine
command: sleep 1000
networks:
- my_network
networks:
my_network:
起動方法:
docker-compose up -d
→ web
から app
に ping app
で通信可能。
Dockerネットワークの管理コマンドまとめ
コマンド | 説明 |
---|---|
docker network ls |
既存のネットワークを表示 |
docker network inspect <ネットワーク名> |
ネットワークの詳細を確認 |
docker network create <ネットワーク名> |
新しいネットワークを作成 |
docker network rm <ネットワーク名> |
ネットワークを削除 |
まとめ
- Bridge: デフォルトのネットワーク、コンテナ間通信に適している。
- Host: ホストと同じネットワークを使用し、ポート設定不要。
- Overlay: Swarm/Kubernetesで使われ、ホスト間通信が可能。
- Macvlan: コンテナに直接IPを割り当て、LAN内の他デバイスとも通信可能。
- Container: 別のコンテナのネットワークを共有。
Dockerのネットワークは、用途に応じて適切なものを選ぶことが重要です!