Docker Swarm でオーバーレイ ネットワークを作成する方法

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

はじめに

Docker Swarm は、コンテナ化されたアプリケーションを大規模にオーケストレーションし管理するための強力なツールです。Docker Swarm の重要な機能の 1 つは、オーバーレイ ネットワーク (overlay network) を作成する機能です。これにより、複数のホスト間でコンテナが安全かつ効率的に通信できるようになります。このチュートリアルでは、Docker Swarm でオーバーレイ ネットワークを作成し、その上にサービスをデプロイする手順を説明します。

Docker オーバーレイ ネットワークの概要

Docker オーバーレイ ネットワーク (Docker Overlay Networks) は Docker Swarm における強力な機能で、複数の Docker ホストにデプロイされたコンテナ間のシームレスな通信を可能にします。これらのネットワークは、基盤となる物理ネットワーク インフラストラクチャを抽象化する仮想ネットワーク層を提供し、コンテナが同じホスト上で実行されているかのように接続し通信できるようにします。

Docker オーバーレイ ネットワークの理解

Docker オーバーレイ ネットワークは VXLAN (Virtual Extensible LAN) プロトコルに基づいており、レイヤ 3 ネットワーク上にレイヤ 2 の仮想ネットワークを作成できるようにします。これにより、コンテナが物理的な位置に関係なく同じ論理ネットワークに接続できるようになります。

graph LR
  A[Docker Host 1] -- Overlay Network --> B[Docker Host 2]
  B -- Overlay Network --> C[Docker Host 3]
  C -- Overlay Network --> A

Docker オーバーレイ ネットワークを使用する主な利点は以下の通りです。

  1. マルチホスト接続性:コンテナは複数の Docker ホスト間で相互に通信できるため、スケーラブルで分散型のアプリケーションのデプロイが可能になります。
  2. 自動サービス検出:同じオーバーレイ ネットワーク上のコンテナは、Docker Swarm が提供する組み込みの DNS サービスを使用して相互に検出し接続できます。
  3. 負荷分散:Docker Swarm の負荷分散機能を利用して、オーバーレイ ネットワーク上で実行されているサービスの複数のレプリカ間でトラフィックを分散できます。
  4. 安全な通信:Docker オーバーレイ ネットワークは暗号化をサポートしており、異なるホスト上のコンテナ間の安全な通信を保証します。

オーバーレイ ネットワークのアーキテクチャ

Docker オーバーレイ ネットワークは Docker Swarm のクラスタリングおよびオーケストレーション システムの上に構築されています。各 Swarm ノード (マネージャまたはワーカー) はオーバーレイ ネットワークに参加し、全体的なネットワーク トポロジとルーティングに貢献します。

Docker オーバーレイ ネットワークのアーキテクチャの主要なコンポーネントは以下の通りです。

  1. **VXLAN トンネル エンドポイント (VTEP)**:各 Swarm ノードは VTEP を実行しており、これはオーバーレイ ネットワーク上のコンテナ間のネットワーク トラフィックのカプセル化とカプセル解除を担当します。
  2. オーバーレイ ネットワーク データベース:Raft などの分散データベースが、オーバーレイ ネットワークの構成とルーティング情報を格納するために使用され、Swarm クラスタ全体での一貫性と可用性を保証します。
  3. オーバーレイ ネットワーク ドライバ:Docker オーバーレイ ネットワーク ドライバは、オーバーレイ ネットワークの作成、構成、および保守を管理する責任があります。

Docker オーバーレイ ネットワークの基本的な概念とアーキテクチャを理解することで、Docker Swarm 環境でこれらのネットワークを作成および管理する能力が向上します。

Docker Swarm でオーバーレイ ネットワークを作成する

Docker Swarm でオーバーレイ ネットワークを作成する手順は簡単です。このセクションでは、オーバーレイ ネットワークを作成し、Docker Swarm 環境で使用するように構成する手順を説明します。

前提条件

オーバーレイ ネットワークを作成する前に、以下の条件を満たしていることを確認してください。

  1. 少なくとも 1 つのマネージャ ノードと 1 つのワーカー ノードを持つ Docker Swarm クラスタ。
  2. Docker Engine のバージョンが 17.06 以上であること。以前のバージョンではオーバーレイ ネットワークの全機能をサポートしていない場合があります。

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

Docker Swarm でオーバーレイ ネットワークを作成するには、以下の手順に従ってください。

  1. Docker Swarm のマネージャ ノードに接続します。
  2. 以下のコマンドを実行してオーバーレイ ネットワークを作成します。
docker network create --driver overlay --attachable my-overlay-network

この例では、--attachable フラグを使用して my-overlay-network という名前のオーバーレイ ネットワークを作成しています。このフラグにより、スタンドアロン コンテナがネットワークに接続できるようになります。

オーバーレイ ネットワークの確認

オーバーレイ ネットワークを作成した後、以下のコマンドを使用してその作成を確認し、詳細を調べることができます。

## List all networks in the Docker Swarm
docker network ls

## Inspect the details of the overlay network
docker network inspect my-overlay-network

docker network inspect コマンドの出力には、オーバーレイ ネットワークに関する情報が含まれます。サブネット、ゲートウェイ、およびネットワークに参加しているノードのリストなどです。

オーバーレイ ネットワーク上にサービスをデプロイする

オーバーレイ ネットワークが作成されたら、その上にサービスをデプロイすることができます。サービスを作成するときに、--network フラグを使用して接続するネットワークを指定できます。

docker service create --name my-service --network my-overlay-network nginx:latest

これにより、my-service という名前の新しいサービスが作成され、my-overlay-network オーバーレイ ネットワークに接続されます。

これらの手順に従うことで、Docker Swarm 環境でオーバーレイ ネットワークを作成および管理し、複数のホスト間のコンテナ間で安全でスケーラブルな通信を可能にすることができます。

オーバーレイ ネットワーク上にサービスをデプロイする

これで Docker Swarm でオーバーレイ ネットワークを作成したので、その上にサービスのデプロイを開始できます。このセクションでは、オーバーレイ ネットワーク上にサービスをデプロイし、その機能を活用する方法を説明します。

サービスをオーバーレイ ネットワークに接続する

Docker Swarm で新しいサービスを作成するときに、--network フラグを使用して接続するネットワークを指定できます。これにより、サービスのコンテナがオーバーレイ ネットワークに接続され、同じネットワーク上の他のサービスと通信できるようになります。

docker service create --name my-service --network my-overlay-network nginx:latest

この例では、my-service という名前の新しいサービスを作成し、my-overlay-network オーバーレイ ネットワークに接続しています。

サービス検出と負荷分散

オーバーレイ ネットワークを使用する主な利点の 1 つは、Docker Swarm が提供する組み込みのサービス検出と負荷分散機能です。サービスがオーバーレイ ネットワーク上にデプロイされると、Swarm の内部 DNS サービスを使用して相互に検出し通信できます。

graph LR
  A[Service A] -- Overlay Network --> B[Service B]
  B -- Overlay Network --> C[Service C]
  C -- Overlay Network --> A

Docker Swarm の負荷分散メカニズムは、サービスのレプリカ間でトラフィックを自動的に分散し、高可用性とスケーラビリティを保証します。

安全な通信

Docker オーバーレイ ネットワークは暗号化をサポートしており、異なるホスト上のコンテナ間の安全な通信を保証します。これは、エンドツーエンドの暗号化を必要とする機密性の高いアプリケーションやサービスをデプロイする場合に特に重要です。

サービスのスケーリング

アプリケーションが拡大するにつれて、より多くのレプリカを追加することでサービスを簡単にスケーリングできます。Docker Swarm は自動的に新しいレプリカのネットワーク構成と負荷分散を処理し、オーバーレイ ネットワーク上の他のサービスとシームレスに通信できるようにします。

docker service scale my-service=5

このコマンドは、my-service を 5 つのレプリカにスケーリングし、Docker Swarm は新しいレプリカがオーバーレイ ネットワークに接続され、他のサービスからアクセスできるようにします。

Docker オーバーレイ ネットワーク上にサービスをデプロイすることで、Docker Swarm が提供するシームレスな接続性、サービス検出、負荷分散、およびセキュリティ機能を活用でき、スケーラブルな分散型アプリケーションの構築と管理が容易になります。

まとめ

この包括的なチュートリアルでは、Docker Swarm でオーバーレイ ネットワークを作成する方法を学びました。これは、スケーラブルで相互接続された Docker ベースのアプリケーションを構築する上で重要なステップです。オーバーレイ ネットワークの機能を活用することで、コンテナ化されたサービス間のシームレスな通信を可能にし、堅牢で効率的なインフラストラクチャを確保できます。このガイドから得た知識を活用して、特定のニーズに合わせて Docker Swarm 環境を自信を持って管理し最適化することができます。