Swarm モード概要

Docker の Swarm モードを利用するには、各種のオペレーティングシステムやプラットフォーム向けの インストール手順 に従って Docker をインストールしてください。

最新版の Docker には Swarm モード が含まれています。 これは Swarm と呼ばれる Docker Engine のクラスターをネイティブに管理するものです。 Docker CLI を使って、Swarm の生成、アプリケーションサービスの Swarm へのデプロイ、Swarm の制御管理を行います。

Docker Swarm モードは Docker Engine 内に組み込まれているものです。 Docker Swarm モードと Docker の旧来の Swarm とを混同しないでください。 後者はもはや積極的な開発は行われていません。

特徴的な機能

  • Docker Engine に統合されたクラスター管理 = Docker Engine CLI を利用して Docker Engine の Swarm を生成します。 これに対してアプリケーションサービスをデプロイすることができます。 Swarm の生成や管理にあたって、オーケストレーションソフトウェアを別途必要としません。

  • 分散型設計 = Docker Engine は、デプロイの際にはノードの役割別に異なった処理を行わず、実行時に特殊な処理を行います。 Docker Engine において、デプロイできるノードの種類はマネージャーとワーカーです。 Swarm 全体は、単一のディスクイメージから構築できることを意味します。

  • 宣言型サービスモデル = Docker Engine は宣言的なアプローチを採用しており、アプリケーション層の各サービスに対して、必要となる状態を定義するということを行います。 たとえばアプリケーションの記述として、ウェブフロントエンドサービスがあり、メッセージキューサービスとデータベースバックエンドから構成されるという記述を行うことがあります。

  • スケーリング = 各サービスに対しては、起動させたいタスク数を指定することができます。 スケールアップやスケールダウンの際に Swarm マネージャー、はタスクの追加または削除を行ない、定義された状態を維持するために自動的な対応を行います。

  • 定義状態への調整 = Swarm マネージャーノードはクラスターの状態を常時監視しています。 そして実際の状態と定義された状態との間に差異があれば調整を行います。 たとえばコンテナーのレプリカを 10 にしてサービス設定を行っていて、そのレプリカ 2 つを受け持つワーカーマシンがクラッシュしたとします。 マネージャーは新たなレプリカ 2 つを生成し直して、クラッシュしたレプリカを置き換えます。 Swarm マネージャーは、利用可能な起動中のワーカーに対して、新たなレプリカを割り当てるものです。

  • マルチホストネットワーク = サービスに対してオーバーレイネットワークを設定することができます。 Swarm マネージャーは、アプリケーションの初期化や更新を行う際に、オーバーレイネットワーク上のコンテナーに対して、アドレスを自動的に割り当てます。

  • サービス検出 = Swarm マネージャーノードは、Swarm 内の各サービスに対して固有の DNS 名を割り当てます。 そして実行コンテナーの負荷分散を行います。 Swarm 内で稼動するコンテナーはすべて、Swarm 内に埋め込まれている DNS サーバーを通じて問い合わせることが可能です。

  • 負荷分散 = 各サービスのポートを外部のロードバランサーへ公開することができます。 内部的に言えば Swarm は、ノード間においてサービスコンテナーをどのように分散するかを指定できるものです。

  • デフォルトで安全 = Swarm 内の各ノードでは TLS 相互認証や暗号化が行われるものになっていて、そのノードそのものを含めた全ノード間でのセキュアな通信が行われます。 自己署名ルート証明書や、カスタムルート CA に基づいた証明書を利用することもできます。

  • ローリングアップデート = 運用開始時には、ノードに対するサービスアップデートを追加的に適用していくことができます。 さまざまなノードグループにおいてサービスデプロイのタイミングに差異があっても、Swarm マネージャーが管理してくれます。 仮に何か問題が発生したときには、サービスバージョンを元に戻すことができます。

次にすることは

Swarm モードの重要な考え方とチュートリアル

Swarm モード CLI コマンド

Swarm モード CLI コマンドを見てみます。

docker, container, cluster, swarm