Docker コンテナのネットワーキングを構成する方法

DockerDockerBeginner
オンラインで実践に進む

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Docker はアプリケーションをコンテナ化するための広く採用されている技術となっていますが、Docker コンテナのネットワーキングの側面を管理することは重要でありながら複雑なタスクとなることがあります。このチュートリアルでは、Docker コンテナのネットワーキングを構成するプロセスを案内します。Docker ネットワークの基本、ネットワークドライバーのセットアップ、およびコンテナとホストの接続について説明します。

Docker ネットワークの基本

Docker ネットワークの理解

Docker は、コンテナのネットワーキングを構成できるいくつかのタイプのネットワークドライバーを提供しています。デフォルトのネットワークドライバーは bridge ドライバーで、これはホストマシン上に仮想ブリッジを作成し、各コンテナをそれに接続します。これにより、コンテナ同士およびホストマシンと通信することができます。

graph LR Host -- Network Bridge --> Container1 Host -- Network Bridge --> Container2 Container1 -- Network Bridge --> Container2

bridge ドライバーに加えて、Docker は hostoverlaymacvlannone などの他のネットワークドライバーもサポートしています。各ドライバーには独自のユースケースと特性があり、次のセクションで詳しく見ていきます。

ネットワークドライバーの種類

  1. Bridge:デフォルトのネットワークドライバーで、ホストマシン上に仮想ブリッジを作成し、コンテナをそれに接続します。
  2. Host:コンテナが仮想ネットワークを迂回してホストのネットワークスタックを直接使用できるようにします。
  3. Overlay:複数の Docker ホスト間のコンテナ間通信を可能にし、分散ネットワークを作成します。
  4. Macvlan:コンテナに MAC アドレスを割り当て、ネットワーク上の物理デバイスのように見せることができます。
  5. None:コンテナのネットワーキングを無効にし、ネットワークから隔離します。

各ネットワークドライバーには独自の利点とユースケースがあります。たとえば、host ドライバーはパフォーマンスに敏感なアプリケーションに役立ち、overlay ドライバーは複数のホストにまたがる分散アプリケーションを構築するために不可欠です。

graph LR Host -- Bridge --> Container1 Host -- Host --> Container2 Host1 -- Overlay --> Container3 Host2 -- Overlay --> Container4 Host -- Macvlan --> Container5 Host -- None --> Container6

異なるネットワークドライバーとそのユースケースを理解することは、Docker 環境でのネットワーキングを構成するために重要です。

ネットワークドライバーの構成

ブリッジネットワークの構成

bridge ネットワークは Docker のデフォルトのネットワークドライバーです。新しいブリッジネットワークを作成するには、次のコマンドを使用できます。

docker network create my-bridge-network

次に、--network フラグを使用してコンテナを新しいブリッジネットワークに接続できます。

docker run -d --name my-container --network my-bridge-network nginx

同じブリッジネットワーク上のコンテナは、コンテナ名またはコンテナの IP アドレスを使用して相互に通信できます。

ホストネットワークの構成

host ネットワークドライバーを使用するには、--network host フラグを指定してコンテナを起動できます。

docker run -d --name my-host-container --network host nginx

host ネットワークを使用する場合、コンテナはホストのネットワークスタックを共有し、ホストのネットワークインターフェイスとポートに直接アクセスできるようになります。

オーバーレイネットワークの構成

オーバーレイネットワークを作成するには、まず Docker Swarm クラスターを初期化する必要があります。Swarm がセットアップされたら、次のコマンドでオーバーレイネットワークを作成できます。

docker network create --driver overlay my-overlay-network

その後、ブリッジネットワークと同じように、--network フラグを使用してコンテナをオーバーレイネットワークに接続できます。

docker run -d --name my-overlay-container --network my-overlay-network nginx

オーバーレイネットワークは、複数の Docker ホスト間のコンテナ間通信を可能にします。

Macvlan ネットワークの構成

macvlan ネットワークドライバーを使用するには、ホスト上の親インターフェイスを指定する必要があります。次のコマンドで新しい macvlan ネットワークを作成できます。

docker network create -d macvlan --subnet=172.16.86.0/24 --gateway=172.16.86.1 -o parent=eth0 my-macvlan-network

その後、--network フラグを使用してコンテナを macvlan ネットワークに接続できます。

docker run -d --name my-macvlan-container --network my-macvlan-network nginx

Macvlan ネットワークでは、コンテナに独自の MAC アドレスを持たせることができ、ネットワーク上の物理デバイスのように見せることができます。

これらの異なるネットワークドライバーの構成方法を理解することで、Docker ベースのアプリケーションに最適なソリューションを選択できます。

コンテナとホストの接続

コンテナのポートを公開する

コンテナ内で実行されているサービスに外部からアクセスできるようにするには、コンテナのポートを公開する必要があります。コンテナを起動する際に -p または --publish フラグを使用してこれを行うことができます。

docker run -d -p 80:80 --name my-web-server nginx

上記の例では、ホストマシンのポート 80 がコンテナ内のポート 80 にマッピングされています。これにより、クライアントはコンテナ内で実行されている Nginx Web サーバーにアクセスできます。

コンテナをリンクする

--link フラグを使用してコンテナ同士を接続することもできます。これにより、あるコンテナが別のコンテナの環境変数やネットワーク情報にアクセスできるようになります。

docker run -d --name my-db-server mysql
docker run -d --name my-app-server --link my-db-server:db nginx

この例では、my-app-server コンテナはエイリアス db を使用して my-db-server コンテナにアクセスできます。

Docker Compose を使用する

Docker Compose は、マルチコンテナアプリケーションの定義と実行のプロセスを簡素化するツールです。Compose を使用して、YAML ファイルでネットワーク構成とコンテナ間の関係を定義することができます。

以下は docker-compose.yml ファイルの例です。

version: "3"
services:
  web:
    image: nginx
    ports:
      - "80:80"
    networks:
      - my-network
  db:
    image: mysql
    networks:
      - my-network
networks:
  my-network:
    driver: bridge

この例では、web サービスと db サービスが my-network ブリッジネットワークに接続されており、互いに通信できるようになっています。

コンテナのポートを公開する方法、コンテナをリンクする方法、および Docker Compose を使用する方法を理解することで、コンテナとホストを効果的に接続して、複雑な分散アプリケーションを構築することができます。

まとめ

このチュートリアルが終わる頃には、Docker ネットワーキングについて包括的な理解を持ち、コンテナのネットワーク設定を効果的に構成できるようになります。異なるネットワークドライバーを活用する方法、コンテナをホストに接続する方法、および Docker ベースのアプリケーションの全体的なネットワーキングパフォーマンスを最適化する方法を学ぶことができます。