ひさしぶりの更新になりますが,複数の Docker サーバーを portainer.io で管理する備忘録です.
まず結論から書くと,
portainer.io の左側のメニューにある「Environments」から設定!
できます.
Docker クラスタ環境を管理する
本稿で取り扱うのは,主に,別々の Docker サーバーをひとつだけ立ち上げた portainer.io でまとめて管理する方法なのですが,portainer.io にはこれ以外にも,
- Docker Swarm(Docker ネイティブなクラスタ構成)を管理
- Kubernetes(言わずと知れたコンテナオーケストレーション環境)を管理
- ACI(Azure Container Instances)を管理
- Nomad を管理(Bueiness ed. の追加機能.CE ed. では使えない)
にも対応しているようです.
複数台の Docker サーバーを管理する手順(その1)
本記事では,バラバラに立ち上がっている複数の Docker サーバーをまとめてひとつの portainer.io で管理する方法について取り扱います.
手順は以下の通りです.
まず,portainer.io の左側のメニューの Environments を選択します.すると以下のように,現在管理している環境一覧が表示されるので,「+ Add Environment」を選択します.
すると,以下のような選択肢が出てきますので,この中から「Docker Standalone」を選択します.見てすぐに分かる通り,これ以外の選択肢は,複数台で構成する Docker クラスタの管理用です.
すると,以下の通り,
- Agent
- API
- Socket
- Edge Agent Standard
の4つの選択肢が出てきます.
Docker Standalone 選択方式の違い
まず,結論から言うと,選択肢としては,Agent か Edge Agent を選択するのが簡単なのですが,念のため,それぞれの選択肢の違いについて以下解説しておきます.ただし,以下,portainer.io が動いている Docker サーバーを「サーバー」,新たに portainer.io で管理しようとしている Dcoker サーバーを「クライアント」と呼ぶことにします.
なお,公式による詳細な説明は,
です.
Agent
クライアントに portainer.io に接続用の Agent アプリ(コンテナ)をインストールすることで,portainer.io の管理下にクライアントを置く方法です.ただし,通信はサーバーからクライアントに接続する形で行います(TCP/IP 9001番ポート経由です).
Agent の導入は,Linux の場合だと,クライアントで,
$ docker run -d \ -p 9001:9001 \ --name portainer_agent \ --restart=always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /var/lib/docker/volumes:/var/lib/docker/volumes \ portainer/agent:2.19.4
を実行するよう「Agent」を選択した時点で指示が表示されるので,それに従うだけです.Windows の場合も同様のコマンドが表示されます.また,portainer.io にはもちろんクライアントの IP アドレス(ドメイン名)を設定します.
Socket
Unix ドメインソケット経由でコンテナを管理する方法です.ただしソケットって,同じサーバー内で動いているプロセスどうしが通信する手段なので,これで管理できるのは portainer.io を導入したのと同じサーバーで動いているコンテナだけです.つまり,今回のようなネットワーク越しに別の Docker サーバーを管理する用じゃありません.
portainer.io を普通に導入した場合,導入サーバーのコンテナが自動的に portainer.io の管理下に入りますが.これを何かの理由で消したのだけど,また,管理対象にしたいって時なんかに選択するのだと思います.
API
Docker API 経由でコンテナを管理する方法です.つまり,クライアントの Docker の設定をリモート接続できるようあらかじめ変更していないといけません……が,私の場合はこの方法は試していません.多分,
あたりの設定をしないといけないんだと思います.
portainer.io の設定は,単に Docker API の URL を指定するだけです(その他にも通信の暗号化するために TLS の設定なんかもできるみたい).
Edge Agent
これは最初に取り上げた Agent と同じく,クライアントに portainer.io に接続用の Agent アプリ(コンテナ)をインストールすることで,portainer.io の管理下にクライアントを置く方法です.ただし,Agent とは通信の方向が逆,つまり,クライアントから portainer.io に定期的に通信が発生する形になります.使用するポートはサーバー側の 9443番です.
以下,この Edge Agent で実際に設定した手順を示します.
複数台の Docker サーバーを管理する手順(その2)
前節に記した通り,ここからは Edge Agent を選んだとして,その後の手順を示します.
Edge Agent を選ぶと,
- Name: クライアント環境に付ける名前(下の例では test とした)
- Portainer API server URL: クライアントの URL(IP アドレス)
の設定ができるようになります.このうち,後者は自動的に適切なアドレスが入力されていますので,実際に設定しないといけないのは前者だけです(さらに「More settings」で,通信間隔(デフォルトは5秒)や,グループ名,タグ名なども指定できます).
指定後,上記画面中央左下部分にある「Create」を選択することで,次のような画面が表示されます.ここに示されているコマンドをクライアントで実行することで,クライアントに Agent アプリ(コンテナ)がインストールされます.
あとは一番下にある「add another environment」を選択し,少し待てば,以下の画面のように追加した環境に「heartbeart」のような表示が出てきます(もし出てこなかった場合は,クライアントから portainer.io への通信がうまくいっていません.Portainer API server URL にサーバーのアドレスを直接指定してみたり firewall で通信が止められていないか等チェックしてください).
あとは,新たに追加した環境を選べばクライアントで動作しているコンテナ一覧を管理できます.
雑感
と言うことで,分かってしまえば大したことはないのですが,portainer.io の管理画面を見てるだけだと,使われている用語が独特?なせいか,全くやり方分かりませんでした.あと,Docker Standalone の選択肢がそれぞれどう言う意味なのか(少なくとも日本語で)説明してくれている記事がなく,結局,公式の解説を見ないといけなかった.
もちろん公式の解説を見れば,ここで書いているよりはるかに詳しい説明書いてあるんですが,逆に言うと,詳しすぎますし,もちろん英語なので,パッと見て判断できるってものでもありません.と言うことで,やっていることの割には設定するのに時間がかかってしまいました.
なお,portainer.io 自体の導入の仕方については,以前に書いた記事
辺りを見ていただければと思います.また,Agent を導入するときのコマンドラインに含まれている EDGE_KEY の意味については,
に詳しい日本語の解説があります.「へー」という感じの内容なので一度参照してみてください.
以上!