複数環境でDocker
を動かすことが多くなり、ログの監視に毎回、docker logs <containername> -f
と打ち込むのが面倒になってきたので、GUI管理画面を探したところPortainer
というサービスを見つけた。
Kubernetes
やSwarm
も管理できるが、まだそれらのツールには手を出していないため今回はDocker
だけに絞って導入のメモをしたいと思う。
必要環境
- Docker
- Web Browser
インストール
Portainer
はコンテナ管理サービスなだけあって、既に公式がコンテナイメージを用意してくれている。
したがって、Docker
さえ動けばLinux
でもWSL
でもVMでもどこでもインストールできる。
コマンドラインから起動しても良いが、ボリュームのマウント等で長くなるのでdocker-compose.yml
を用意した。
version: "3.4" services: portainer: image: portainer/portainer-ce container_name: portainer ports: - 9000:9000 restart: always volumes: - type: bind source: /var/run/docker.sock target: /var/run/docker.sock - type: volume source: portainer target: /data volumes: portainer: name: portainer_data
$ docker-compose up -d
でportrainer
という名前のコンテナが起動して9000番でリッスンしている。
これはhttp
用のポートなので、https
接続したい時は9443番を使う。
Windowsの場合
Windowsの場合、「/var/run/docker.sock
がない」と怒られるので、.env
ファイルを用意して次を記入する。
COMPOSE_CONVERT_WINDOWS_PATHS=1
ブラウザーでhttp://localhost:9000を見に行けばOK。
リモートのDockerと繋ぐ
リモートのDocker(以降、リモートDocker)と繋ぐには、リモートDockerのデーモンをtcpでリッスンさせておく必要がある。serviceファイルを編集して対応する。
[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service containerd.service Wants=network-online.target Requires=docker.socket containerd.service [Service] Type=notify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not support the cgroup feature set required # for containers run by docker ExecStart=/usr/bin/dockerd -H tcp://127.0.0.1:2376 -H fd:// --containerd=/run/containerd/containerd.sock # ここ ExecReload=/bin/kill -s HUP $MAINPID TimeoutSec=0 RestartSec=2 Restart=always
これで2376ポートでリッスンするのでPortainer
のサイドバーのEnvironment
から追加する。
インターネットを介すときはTLSを施しておかないと危ない気がする。
私は面倒なのでssh
のポートフォワーディングで対処してる。
$ ssh -l <username> <hostname> -fNL localhost:2376:<hostname>:2376