ヒント

Swarm モード機能を導入した Docker Engine 1.12 はリリース候補(release candidate)機能であり、後方互換を考慮していない可能性があります。一般リリース(generally available)になるまで、いくつかの機能が変わる可能性があります。

Swarm モード概要

Docker Engine を swarm モードで使うには、 Docker リリース GitHub リポジトリ から Docker Engine v1.12.0-rc1 以降をインストールします。あるいは Docker for Mac か Docker for Windows の最新版をインストールします。

Docker Engine 1.12 は swarm モードを取り込んでいます。Swarm は Docker Engine のクラスタをネイティブに(当たり前に)管理します。Docker CLI で swarm(訳者注;「群れ」という意味で、Docker Engine のクラスタを表す)を作成し、swarm にアプリケーション・サービスをデプロイし、swarm の挙動を管理します。

Docker バージョン v1.12.0-rc1 より低いバージョンをお使いであれば、 Docker Swarm のドキュメントをご覧ください。

Swarm の主な機能

  • Docker Engine にクラスタ管理を統合 : Docker Engine CLI を使い Docker Engine の Swarm(群れ)を作成します。ここにアプリケーション・サービスをデプロイできます。Swarm の作成や管理のために、追加のオーケストレーション・ソフトウェアは不要です。
  • 分散化の設計 : デプロイ時点ではノードに役割(role)を与えません。Docker Engine は実行時に役割を明確化します。ノードの種類は、マネージャ(manager)とワーカ(worker)です。この両方を Docker Engine でデプロイできます。つまり1つのディスク・イメージから Swarm(のクラスタ)全体を構築できます。
  • 宣言型サービス・モデル : Docker Engine は宣言型の構文を使います。これを使い、アプリケーション・スタックの様々なサービスの期待状態(desired state)を定義できます。たとえば、ウェブ・フロントエンド・サービスを構成するアプリケーションは、メッセージのキューイング・サービスとデータベース・バックエンドを持つと記述できるでしょう。
  • スケーリング(scaling) : サービスごとに実行したいタスク数を宣言できます。スケールアップやスケールダウン時は、swarm マネージャは期待状態を維持するため、自動的にタスクの追加や削除を行います。
  • 期待状態の調整(reconciliation) : Swarm は絶えずクラスタ状態の監視と調整をします。監視するのは自分が示した望ましい状態であり、少しでも差違があれば調整の処理を行います。
  • マルチホスト・ネットワーク : アプリケーション用のオーバレイ・ネットワークを指定できます。アプリケーションの初期化もしくは更新時に、Swarm はオーバレイ・ネットワーク上のコンテナに自動的にアドレスを割り当てます。
  • サービス・ディスカバリ(service discovery) : Swarm は各サービスにユニークな DNS 名を割り当て、実行中のコンテナに対する負荷分散(load balance)をします。各 Swarm は内部 DNS サーバ(internal DNS server)を持ち、クラスタ内の全てのコンテナを DNS で問い合わせ(クエリ)可能です。
  • 負荷分散(load balancing) : Swarm を使えば、サービス用のポートを外部のロードバランサへ公開できます。必要なのは、ノード間でどのようにサービス・コンテナを分散するかを Swarm で指定するだけです。
  • デフォルトで安全 : Swarm 上の各ノードは安全に通信できるように、 TLS 相互認証(TLS mutual authentication)と暗号化を自分自身と他の全てのノード間で強制します。
  • ローリング・アップデート : ロールアウト時に、サービス更新をノード単位で徐々に適用できます。異なるノード群の間にサービスをデプロイ時、swarm マネージャはノードごとの遅延を制御します。何か問題があれば、サービスのタスクを以前の状態にロールバックできます。

次は何をしますか?

参考

Swarm mode overview
https://docs.docker.com/engine/swarm/