複数の仮想サーバーでdocker-composeで起動したコンテナの管理をする方法を調べていて、swarm modeにたどり着いたので調べたことを残す。
コマンドでモード切替
- 有効化:
docker swarm init
- 無効化:
docker swarm leave --force
- 有効化:
シングルノードでも試せる
- シングルノードの場合は、init時の
--advertise-addr
指定は不要
- シングルノードの場合は、init時の
Docker swarmとswarm modeは別
- Docker 1.12からDocker本体にswarmが取り込まれて、swarm modeになった
- 1.12以降でもswarmは使えるが、swarm modeの方が簡単に利用できる
複数ノードで構成する場合は、コンテナイメージをレジストリに格納する必要がある
複数ノードで構成する場合は、ノード間でいくつかのポートの通信を許可しておく必要がある
- TCP port 2377 は、クラスタ管理通信のため
- TCP と UDP の port 7946 は、ノード間の通信のため
- UDP port 4789 はオーバレイ・ネットワーク・トラフィックのため
swarmにサービスをデプロイすると、タスクが作成される
- AWSのECSに似た概念?
サービスのデプロイは、
docker-compose up
コマンドではなく、docker service create
を使う- シングルノードの場合は、WARNINGは出るがdocker-composeも使える
swarmクラスタの可視化ができる
portainer
というOSSがある
参考リンク
- Docker swarm mode でDockerのオーケストレーションツール入門 - Qiita
- Single node docker swarm でお手軽 rolling update | 1Q77
- portainer/portainer: Making Docker and Kubernetes management easy.
- swarm モードの概要 | Microsoft Docs
- Swarm モードの重要な概念 — Docker-docs-ja 19.03 ドキュメント
- Docker Swarmで学ぶサービスメッシュ - Qiita
- Swarm で Compose を使う — Docker-docs-ja 17.06 ドキュメント
- Docker Swarm mode 入門と ECS との比較 - Google スライド