Dockerを使用する際に理解しておくべき重要な側面の一つが「ネットワーク」です。コンテナ間の通信やホストマシンとの接続など、適切なネットワーク設定はアプリケーションの正常な動作に不可欠です。この記事では、Dockerのネットワーク機能について詳しく解説します。
Dockerネットワークの基本
Dockerをインストールすると、デフォルトで以下のネットワークドライバーが利用可能になります:
- bridge: デフォルトのネットワークドライバー。同一ホスト上のコンテナ間通信に使用されます。
- host: コンテナがホストのネットワークスタックを直接使用します。
- none: コンテナにはネットワークインターフェースが割り当てられません。
- overlay: 複数のDockerデーモン間でのコンテナ通信を可能にします(Swarmモードで主に使用)。
- macvlan: コンテナに物理ネットワークへのダイレクトアクセスを提供します。
- ipvlan: macvlanに似ていますが、異なるアーキテクチャを使用します。
bridgeネットワーク
デフォルトでは、新しいコンテナは「bridge」ネットワークに接続されます。これを確認するには:
docker network ls
このコマンドを実行すると、bridge
、host
、none
といったデフォルトネットワークが表示されます。
デフォルトのbridgeネットワークには以下の特徴があります:
- 同じbridgeネットワーク上のコンテナ同士はIPアドレスで通信可能
- コンテナ名での名前解決は不可(カスタムbridgeネットワークでは可能)
- ポート公開が必要な場合は明示的にポートマッピングが必要
カスタムbridgeネットワークの作成
より柔軟性の高いネットワーク環境を構築するために、カスタムbridgeネットワークを作成できます:
docker network create my-network
カスタムネットワークの利点:
- コンテナ間の自動DNS解決(コンテナ名で通信可能)
- より良い分離性
- コンテナを動的に接続・切断可能
コンテナをネットワークに接続する
新しいコンテナをカスタムネットワークに接続するには:
docker run -d --name my-container --network my-network nginx
既存のコンテナを接続するには:
docker network connect my-network my-container
hostネットワーク
ホストネットワークを使用すると、コンテナはホストマシンのネットワークスタックを直接使用します:
docker run -d --network host nginx
特徴:
- パフォーマンスが向上(ネットワークオーバーヘッドが少ない)
- ポートマッピングが不要
- ホストのネットワークセキュリティに直接影響
noneネットワーク
完全に分離されたネットワーク環境が必要な場合は、none
ネットワークを使用します:
docker run -d --network none alpine sleep infinity
このコンテナは外部ネットワークと通信できません。
Docker Composeでのネットワーク設定
Docker Composeでは、複数コンテナのネットワーク設定を簡単に管理できます:
version: '3'
services:
web:
image: nginx
networks:
- frontend
db:
image: mysql
networks:
- backend
- frontend
networks:
frontend:
backend:
ネットワークの検査とトラブルシューティング
ネットワークの詳細を調べるには:
docker network inspect my-network
このコマンドは、ネットワークに接続されたコンテナ、IPアドレス割り当て、ゲートウェイなどの情報を表示します。
ポートマッピング
コンテナのサービスをホストから利用可能にするには、ポートマッピングを設定します:
docker run -d -p 8080:80 nginx
この例では、ホストの8080ポートへのアクセスがコンテナの80ポートに転送されます。
まとめ
Dockerのネットワーク機能を理解することで、コンテナ間の通信を効率的に設計し、セキュアなアプリケーション環境を構築できます。アプリケーションの要件に応じて適切なネットワークドライバーを選択し、必要に応じてカスタムネットワークを作成することで、柔軟で堅牢なコンテナ環境を実現しましょう。
次回は、より高度なネットワーク設定やマルチホスト環境でのネットワーキングについて解説します。
コメント