マルチホスト通信のための接続可能なオーバーレイネットワークの作成
ブリッジネットワークは、同じ Docker ホスト上のコンテナ間の通信に適しています。しかし、異なる Docker ホスト上で実行されているコンテナ間の通信には、オーバーレイネットワークが必要です。オーバーレイネットワークは Docker Swarm によって作成および管理されます。
このステップでは、接続可能なオーバーレイネットワークを作成します。接続可能なオーバーレイネットワークは、スタンドアロンコンテナ(Swarm サービスの一部ではないコンテナ)が接続し、異なる Docker ホスト間で通信できるようにします。
まず、このホストで Docker Swarm を初期化する必要があります。これはオーバーレイネットワークを作成および管理するために必要です。
docker swarm init --advertise-addr $(hostname -I | awk '{print $1}')
このコマンドは Swarm を初期化し、アドバタイズアドレスをホストの IP アドレスに設定します。出力には、現在のノードが Swarm マネージャーになったことが表示されます。
Swarm が初期化されたので、接続可能なオーバーレイネットワークを作成できます。これを my-overlay-network
と名付けます。--attachable
フラグは、スタンドアロンコンテナが接続できるようにするために重要です。
docker network create \
--driver overlay \
--attachable \
my-overlay-network
--driver overlay
フラグは、オーバーレイネットワークを作成することを指定します。--attachable
フラグは、スタンドアロンコンテナがこのネットワークを利用できるようにします。
オーバーレイネットワークが作成されたことを確認するには、Docker ネットワークをリストアップしましょう。
docker network ls
リストに my-overlay-network
が表示され、そのドライバーは overlay
であるはずです。
では、スタンドアロンコンテナを実行し、新しいオーバーレイネットワークに接続しましょう。alpine
イメージを使用します。
docker run -d --name overlay-container1 --network my-overlay-network alpine sleep infinity
このコマンドは、overlay-container1
という名前のコンテナを実行し、my-overlay-network
に接続します。
コンテナがオーバーレイネットワークに接続されていることを確認するには、コンテナを調査しましょう。
docker inspect overlay-container1
出力で Networks
セクションを探します。my-overlay-network
がリストされているはずです。
これは単一ホスト環境なので、マルチホスト通信を完全に実証することはできません。しかし、複数の Swarm ノードがあれば、このネットワークはマルチホスト通信をサポートするように構成されています。
この単一ホスト上の同じオーバーレイネットワーク上に別のコンテナを実行しましょう。
docker run -d --name overlay-container2 --network my-overlay-network alpine sleep infinity
これで、overlay-container1
と overlay-container2
の両方が my-overlay-network
上にあり、通信できるはずです。
コンテナに iputils
をインストールして ping を行いましょう。
docker exec overlay-container1 apk add --no-cache iputils
docker exec overlay-container2 apk add --no-cache iputils
overlay-container1
から overlay-container2
を ping して通信をテストしましょう。
docker exec overlay-container1 ping -c 3 overlay-container2
ping の応答が成功するはずで、これはこの単一ホスト上のオーバーレイネットワーク内での通信が確認できることを示しています。