Docker-SwarmとPortainerによるコンテナ管理

はじめに

複数の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クラスター用の環境を追加する必要があります。

Image in a image block

EnvironmentsからAdd environmentを選択し、Docker Swarmを選びます。

Image in a image block

次に、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環境の集中管理を実現できました。
これにより、コンテナ管理の効率が大幅に向上します。