3.1 bridgeネットワーク
の基本
bridgeネットワーク
はDockerのデフォルトのネットワークドライバーで、コンテナ同士が相互に通信できる分離されたネットワークを作成するために使用される機能だよ。このネットワークを使えば、コンテナはIPアドレスやホスト名を使って通信できるし、マルチコンテナアプリケーションの各コンポーネント間でのやり取りを簡単に構築できるんだ。
bridgeネットワーク
はホストレベルでプライベートな内部ネットワークを作成し、ホストの外部ネットワークから隔離されるよ。このネットワークに接続されているコンテナは互いに通信可能だけど、ポートフォワード設定なしでは外部から直接アクセスすることはできない。
自動的に作成されるbridgeネットワーク
デフォルトでDockerインストール時にbridgeネットワーク
が作成されるよ。そして特定のネットワークを指定せずに起動されたコンテナは、自動的にこのネットワークに接続されるんだ。
bridgeネットワーク
でのコンテナ作成・使用例
1. bridgeネットワーク
でコンテナを起動する:
この例では、Nginxを使ったcontainer1と、Busyboxを使ったcontainer2を起動するよ。両方のコンテナはデフォルトのbridgeネットワーク
に接続される。
docker run -d --name container1 nginx
docker run -d --name container2 busybox sleep 1000
2. コンテナのIPアドレスを確認する:
コンテナのIPアドレスを確認するには、docker inspect
コマンドを使うよ。
これらのコマンドを使えば、コンテナ間の通信に使えるIPアドレスがわかるよ。
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container1
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container2
3. IPアドレスを使ったコンテナ間の通信:
コンテナ間の通信を確認するには、container2
内からcontainer1
をping
コマンドで叩いてみて。
コンテナが正しくbridgeネットワーク
に接続されていれば、ping
コマンドは成功するよ。
docker exec container2 ping -c 4 <IP_ADDRESS_OF_CONTAINER1>
補足: bridgeネットワーク
は、コンテナ同士が通信しつつ外部ネットワークから隔離された状態でローカルアプリケーションを動作させるためのシンプルな解決策だよ。IPアドレスによるping
がネットワーク接続を確認するための基本的な方法だけど、もっと複雑なアプリケーションにはDNSや追加のネットワークドライバ設定が必要になることがあるよ。
3.2 ホスト名の使用
ホスト名を使用してコンテナ間を接続する
IPアドレスの使用に加えて、Dockerではコンテナ名を使用してコンテナ間を接続することもできるよ。これにより構成が簡単になって便利だよ、だってコンテナ名は固定されてるけど、IPアドレスはコンテナを再起動すると変わることもあるからね。
ホスト名による接続の例
1. bridge
ネットワークを指定してコンテナを起動する:
docker run -d --name webserver --network bridge nginx
docker run -d --name appserver --network bridge busybox sleep 1000
2. ホスト名での接続を確認する:
appserver
コンテナからping
コマンドを使ってwebserver
をpingしてみて:
docker exec appserver ping -c 4 webserver
カスタムbridgeネットワーク
の作成
デフォルトのbridgeネットワーク
を使う代わりに、カスタムのbridgeネットワーク
を作成することで、コンテナ間のやり取りをもっとしっかりコントロールできるよ。
カスタムネットワーク作成の例
1. カスタムネットワークを作成する:
docker network create --driver bridge my_bridge_network
2. カスタムネットワークでコンテナを起動する:
docker run -d --name webserver --network my_bridge_network nginx
docker run -d --name appserver --network my_bridge_network busybox sleep 1000
3. ホスト名での接続を確認する:
docker exec appserver ping -c 4 webserver
3.3 複数ホストの例
実際の使用例
例 1: Webサーバーとデータベース
Webサーバーとデータベース用のdocker-compose.yml
ファイルを作成:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_bridge_network
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
Docker Composeを起動:
docker compose up -d
コンテナ間の接続を確認:
docker compose exec web ping -c 4 db
例 2: マイクロサービスアーキテクチャ
マイクロサービスアプリケーション用のdocker-compose.yml
ファイルを作成:
version: '3.8'
services:
frontend:
image: nginx:latest
networks:
- my_bridge_network
backend:
image: mybackend:latest
networks:
- my_bridge_network
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
Docker Compose
を起動:
docker compose up -d
コンテナ間の接続を確認:
docker compose exec backend ping -c 4 db
docker compose exec frontend ping -c 4 backend
GO TO FULL VERSION