最近全然Blogを書かずRustやってたり、最近は仮想通貨に手を出したと思いきやその仮想通貨のコミュニティで開発をちょっと手伝ったりしている今日この頃です。

で、そのコミュニティでちらっと話に出たPortainerを使ってみました。

Portainerとは何か

一言で言えばDocker管理WebUIです。

正直一人でcomposeファイルを書いてサーバを管理している分には不要なものだと思いますが、あまり操作はしないけど稼働状態をちょいちょい確認したいとか、レプリカ数を増減する程度の操作がしたいだけという向きには有用かと思います。

試してみる

今回はDocker for Windowsのdocker-machineでノードを4つ(master、front、worker1、worker2)を建ててswarm modeクラスタを構成し、Portainerをmasterノードで動作させてみました。

> docker-machine create -d hyperv master   # Boot2Dockerの仮想マシンを作成
> docker-machine create -d hyperv front
> docker-machine create -d hyperv worker1
> docker-machine create -d hyperv worker2

> docker-machine ssh master
$ docker swarm init
(メッセージの docker swarm join --token ... の部分をコピーしておく)
$ exit

> docker-machine ssh front
$ docker swarm join --token ...  # 上でコピーしたものを貼る
$ exit
(worker1、worker2でもfrontと同様に行う)

上記の作業でノードを4つ建ててswarm modeクラスタを構成することができます。後はPortainerを起動するだけですが、Swarm Mode上でPortainerを動かすならManagerロールのノード(この場合はmasterノード)で実行するようdocker compose v3ファイルを書くのがよいかと思います。

> docker-machine ssh master
$ vi stack.yml               # これにcompose v3を記述します。内容は後述
$ docker stack deploy -c stack.yml portainer
version: "3.3"
services:
  portainer:
    image: portainer/portainer
    ports:
      - 9000:9000
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    command: ["-H", "unix:///var/run/docker.sock"]
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.role == manager
      restart_policy:
        condition: any

ブラウザで http://<masterノードのIPアドレス>:9000/ を開き、Portainerの管理者を初期設定するページが開けば成功です。

ノード一覧ページ

PortainerはSwarm Modeにも対応しているとのことで、masterでしかPortainerを起動していませんが、Dockerのソケット経由で他のノードの情報も取得してくれるようです。

secretsや最近追加されたconfigも操作できる(Web上のエディタで書いたりできる)ようなので、思いの外色々操作はできそうです。

Kubernetesがどこまで広がってくるかわかりませんが、それまではSwarm Modeと必要に応じてPortainerも使って待ってたらいいんじゃないかな、と思います。