Docker Swarmによって束ねられた複数のDockerホストの集まり(群れ)は、「クラスタ」と呼ばれます。SwarmとはDockerエンジンの集合体、すなわちクラスタを意味し、クラスタではアプリケーションが稼働するコンテナを「サービス」として定義します。この複数のサービスが配備される場所が「Swarm」です。
Swarmの特徴は、複数のDocker ホストを集め、1つの仮想的な Docker ホストとして扱える点です。一般的に、Dockerの世界で「Swarm」というと、「複数のDockerエンジンが集まったクラスタ」を意味します。つまり「Swarmで稼働するコンテナ」は、Swarmによって形成されたクラスタで稼働するコンテナになります。
Docker Swarmクラスタは、マネージャノードとワーカノードから構成されます。ここでいうノードとは、Swarmクラスタに参加しているDockerエンジンのインスタンスを意味します。マネージャノードは、Swarmクラスタ全体を管理します。マネージャノードは複数台でも構成できます。一方、ワーカノードは、Dockerコンテナが稼働するDockerホスト群です。Docker 1.12以上では、「Ingress」(イングレス)という名前のオーバレイネットワークがビルトインされています。また、ユーザー独自のオーバレイネットワークを定義することもできます。
Docker Swarm 1.11までのバージョンで負荷分散を実現するには、「Kubernetes」(クーバネティス)と呼ばれるソフトウェアなどを別途組み込む必要がありました。しかし、Docker 1.12からDocker SwarmがDockerエンジン本体に取り込まれたことで、Kubernetesを使わずにDocker Swarm入りのDockerエンジンで負荷分散できるようになりました。
Swarmクラスタで提供されるIngressオーバレイネットワーク上で稼働するコンテナのアプリケーションは、特定のポートを公開し、外部にサービスを提供します。クライアントからIngressオーバレイネットワーク上で公開されているアプリケーションのポートに対してアクセスすると、サービスが稼働しているクラスタのワーカノードに自動的にルーティングされます。このときのワーカノードの負荷は自動的に分散されます。
マネージャノードは、「Ingressロードバランシング」と呼ばれる負荷分散機能によって、Swarm クラスタの外部に存在するクライアントにサービスを公開します。この時、公開用ポートが割り当てられます。クラスタ外に存在するクライアントは、公開用ポートを使ってSwarmクラスタ上のノードにアクセスできます。Swarmクラスタにおいては、ワーカノード間でサービスをどのように分散するかを指定できます。また、Swarm クラスタの内部には、 DNSがビルトインされており、Swarm マネージャノードは、負荷分散機能を使ってクラスタ内におけるサービスのDNS 名に基づいて、接続要求を分散処理することができます。
Copyright © ITmedia, Inc. All Rights Reserved.