Swarm モード概要

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

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

https://docs.docker.com/engine/swarm/