複数環境で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