Dockerのネットワーク設定を理解しよう

Dockerを使用する際に理解しておくべき重要な側面の一つが「ネットワーク」です。コンテナ間の通信やホストマシンとの接続など、適切なネットワーク設定はアプリケーションの正常な動作に不可欠です。この記事では、Dockerのネットワーク機能について詳しく解説します。

Dockerネットワークの基本

Dockerをインストールすると、デフォルトで以下のネットワークドライバーが利用可能になります:

  • bridge: デフォルトのネットワークドライバー。同一ホスト上のコンテナ間通信に使用されます。
  • host: コンテナがホストのネットワークスタックを直接使用します。
  • none: コンテナにはネットワークインターフェースが割り当てられません。
  • overlay: 複数のDockerデーモン間でのコンテナ通信を可能にします(Swarmモードで主に使用)。
  • macvlan: コンテナに物理ネットワークへのダイレクトアクセスを提供します。
  • ipvlan: macvlanに似ていますが、異なるアーキテクチャを使用します。

bridgeネットワーク

デフォルトでは、新しいコンテナは「bridge」ネットワークに接続されます。これを確認するには:

docker network ls

このコマンドを実行すると、bridgehostnoneといったデフォルトネットワークが表示されます。

デフォルトの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のネットワーク機能を理解することで、コンテナ間の通信を効率的に設計し、セキュアなアプリケーション環境を構築できます。アプリケーションの要件に応じて適切なネットワークドライバーを選択し、必要に応じてカスタムネットワークを作成することで、柔軟で堅牢なコンテナ環境を実現しましょう。

次回は、より高度なネットワーク設定やマルチホスト環境でのネットワーキングについて解説します。

コメント

タイトルとURLをコピーしました