はじめに
複数のPCでDockerを稼働していると、コンテナの管理が煩雑になりがちです。
どのマシンでどのコンテナが動いているのか分からなくなったり、設定を忘れてしまったりと、一元管理の必要性を感じていました。
そんな中、下記の記事で、Docker SwarmとPortainerを使えば簡単に複数マシンのコンテナを一元管理できることを知りました。
実際に試してみたところ、驚くほど簡単に導入できたので、その手順を共有したいと思います。
Docker Swarmのセットアップ
まず、Docker Swarmクラスターを構築します。既にDockerがインストールされている環境でも導入可能ですが、既存のコンテナやネットワーク構成への影響については、別途公式ドキュメント等をご参照ください。
本記事ではSwarmとPortainerのセットアップに焦点を当てます。
クラスターは、管理を担当する「マネージャー」ノードと、コンテナを実行する「ワーカー」ノードで構成されます。
1. マネージャーノードの初期化
管理用マシンで以下のコマンドを実行し、Swarmを初期化します。
--advertise-addrには、他のノードがマネージャーに接続するためのIPアドレスを指定してください。
❯ docker swarm init --advertise-addr 192.168.1.20
Swarm initialized: current node (74q2km0k011vnaggo4k7zyyqz) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-1jaibvf6acqqzbdl1vqc3rpuour3khvuam7mzmguz2jqxr36t7-ev5ewk65j2elhmlx6473vxolj 192.168.1.20:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
実行後、ワーカーノードをクラスターに参加させるためのコマンドが表示されるので、トークンを含めてコピーしておきます。
2. ワーカーノードの参加
次に、クラスターに参加させたいワーカーマシンで、先ほどコピーしたコマンドを実行します。
❯ docker swarm join --token SWMTKN-1-1jaibvf6acqqzbdl1vqc3rpuour3khvuam7mzmguz2jqxr36t7-ev5ewk65j2elhmlx6473vxolj 192.168.1.20:2377
This node joined a swarm as a worker.
これで、ワーカーノードがSwarmクラスターに参加しました。
マネージャーノードで docker node ls を実行すると、クラスターに参加しているノードの一覧を確認できます。
PortainerによるSwarmクラスターの管理
コマンドラインでも管理できますが、Portainerを使うとGUIで直感的に操作できます。
Swam版Portainerインストール
マネージャー側にて下記を実行
$ curl -L https://downloads.portainer.io/ce-lts/portainer-agent-stack.yml -o portainer-agent-stack.yml
$ docker stack deploy -c portainer-agent-stack.yml portainer Portainerへの接続と設定
ブラウザでPortainerのUI(https://<マネージャーIP>:9443 または http://<マネージャーIP>:9000)にアクセスします。
ローカル環境のPortainerとは別に、Swarmクラスター用の環境を追加する必要があります。
EnvironmentsからAdd environmentを選択し、Docker Swarmを選びます。
次に、Agentタブを選択し、以下の情報を入力します。
- Name:
Swarm Cluster(任意の名前) - Environment address:
tasks.agent:9001
設定後、"Swarm Cluster"環境に接続すると、マネージャーだけでなくワーカーノードのリソースも一覧で表示され、コンテナのデプロイや管理が簡単に行えるようになります。
ちなみに、マネージャーのターミナルからCLIでも確認が出来ます
❯ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
74q2km0k011vnaggo4k7zyyqz * manager Ready Active Leader 28.5.1
lf4upikxqwi5oglbevf0u0grq worker Ready Active 20.10.12 まとめ
Docker SwarmとPortainerを組み合わせることで、たった数コマンドで複数マシンにまたがるDocker環境の集中管理を実現できました。
これにより、コンテナ管理の効率が大幅に向上します。
