Dokploy (Docker Swarm)

Dokployは、Docker Composeベースの複数コンテナ管理を視覚化するツールです。コンテナの配置、設定変更、イメージ更新といった一連のワークフローを、Webダッシュボード上で簡単に行うことができます。 SSL証明書の自動発行・更新やGitHubとの連携による自動デプロイにも対応しています。

Dokploy自体コンテナの集合体で、Docker Swarmのマスターノードとしての位置付けです。

注)Dokployはウェブサイトやウェブアプリの管理には非常に便利なツールですが、SIPサーバのようにリアルタイム性と安定した接続品質が強く求められる用途には適していません。

インストールされるのはdokployというSwarmサービスとdokploy-traefikというネットワークを管理するコンテナです。

ドキュメント

ルートユーザで実行。80,443,3000ポートは予めオープンにすること。

# curl -sSL https://dokploy.com/install.sh | sh

インストールが終了したら、http://local_ip:3000 でアクセス

管理者アカウントを作成してログインします。

ログイン後、プロジェクトの作成、DokployのURLのドメイン登録、コンテナイメージをPullするRegistry登録を行います。

Dokployのドメイン登録

HTTPSへの対応は、Letsencryptを利用して Traefic コンテナが行います(ドメイン登録、自動更新)。

DockerイメージのRegistry登録

GHCR(GitHub Container Registry)とDockerHubを登録します。登録にはパーソナルアクセストークンが必要です。

Settings > Developer settings > Personal access tokens > Tokens (classic)

write:packages(+read:packages)をチェック

各URLの入力欄には、ghcr.io, docker.io と入力します。

GitHubへの登録

プロジェクト作成

FusionPBXのプロジェクト

プロジェクト内の各サービス(コンテナ)

各サービス(コンテナ)のボリューム、ポート、ビルド以外の設定はAdvancedSwarm Settingsで行います。

例)FreeSWITCHのネットワークをHostに指定

DokployをQEMU/KVMで運用する場合の注意点

Dockerとの相性でVMイメージデータをraw形式で作成(変換)すること。詳細は下記記事参照。

Dokployでコンテナのデプロイを繰り返しているうちにDeadコンテナが多数残存、Dockerの挙動がおかしくなったため、暫定対策として、Dockerデーモン停止後、/var/lib/dockerの中身を削除してDockerの環境リセット(イメージ、ボリューム、ネットワークなど全消去)実施。

$ sudo systemctl stop docker
$ sudo systemctl stop containerd
$ sudo mv /var/lib/docker /var/lib/docker.broken
$ sudo mkdir /var/lib/docker
$ sudo chmod 711 /var/lib/docker
$ ssudo systemctl start containerd
$ sudo systemctl start docker

Traefikコンテナの再設定・再起動

Web Server -> Traefik でポートマッピングミスなどで、Dokployへのアクセス不可となった場合の処置。

Traeficコンテナを停止・削除し、設定ファイルも削除。

$ docker service scale dokploy=0
$ sudo rm -rf /etc/dokploy/traefik/traefik.yml
$ docker stop dokploy-traefik
$ docker service scale dokploy=1

Traefikイメージからコンテナ再起動

$ docker rm dokploy-traefik
$ docker run -d \
        --name dokploy-traefik \
        --network dokploy-network \
        --restart always \
        -v /etc/dokploy/traefik/traefik.yml:/etc/traefik/traefik.yml \
        -v /etc/dokploy/traefik/dynamic:/etc/dokploy/traefik/dynamic \
        -v /var/run/docker.sock:/var/run/docker.sock \
        -p 80:80/tcp \
        -p 443:443/tcp \
        -p 443:443/udp \
        traefik:v3.1.2

注)Traefikイメージのバージョンは $ docker images で確認