Ubuntu Weekly Recipe

第923回DockgeでDocker Composeをブラウザから手軽に管理しよう

Dockerでアプリケーションを動かすのであれば、コンテナやネットワークなどの構成をYAMLファイルにまとめられる、Docker Composeを使うのがお勧めです。しかし複数のアプリを動かしていると、Composeファイルも徐々に増えていきます。SSHでサーバーへログインし、各ディレクトリで「docker compose up」「docker compose pull」を手動実行しても構いませんが数が増えてくると現在動いているComposeスタックを一覧したり、compose.yamlを編集したりするのが少々面倒になってくるでしょう。

そこで今回は、Docker ComposeのスタックをWebブラウザから管理できるDockgeを紹介します。

Dockgeとは

DockgeはDocker Composeのスタックを、Webブラウザから管理するためのツールです。Docker Composeスタックの起動や停止、再起動、Dockerイメージの更新、compose.yamlの編集などをGUIから行えます。

開発しているのは第901回でも紹介した、死活監視ツールのUptime Kumaの作者でもあるLouis Lam氏です。そのため画面の雰囲気もUptime Kumaによく似ており、シンプルで分かりやすい点も共通しています。

Dockgeの大きな特徴は、あくまで「Docker Composeを扱いやすくするためのGUI」であるという点です。作者自身もDockgeについて「docker composeのラッパーにGUIを付けたもの」と説明しています。Dockerそのものを独自の仕組みに置き換えるわけではありません。たとえばDockgeで管理するスタックは、通常のcompose.yamlとしてホスト上のディレクトリに保存されます。そのためDockgeを使わず、SSHでサーバーへログインして従来通りに「docker compose」コマンドを直接実行しても構いません。公式ではこれを「Dockge won't kidnap your compose files(DockgeはComposeファイルを人質に取らない⁠⁠」と表現しています。つまりDockge独自のデータベースにComposeの定義を閉じ込めるのではなく、これまで通りcompose.yamlを管理しながら、必要な時だけGUIを併用できるわけです。

筆者はDocker Composeで動かしているアプリケーションについて、基本的には「アプリケーションごとにディレクトリを作り、その中にcompose.yamlを置く」という形で管理しています。この方法は構成が分かりやすい反面、アプリケーションが増えてくると、どのスタックが動いているのかを確認するために複数のディレクトリを行き来する必要があります。Dockgeを使うと、それらをWebブラウザから一覧できます。その一方でcompose.yamlそのものは従来通りファイルとして残るため、CLIでの管理方法を捨てる必要もありません。この「既存のDocker Compose運用をほとんど変えずにGUIだけ追加できる」という点が、Dockgeのメリットでしょう。

なおPortainerのようなDocker管理ツールと似ていますが、DockgeはDocker Composeのスタック管理にかなり特化しています。単一コンテナを細かく管理したい場合などは、PortainerやDocker CLIの方が適しています。公式FAQでも、単一コンテナの管理についてはPortainerまたはDocker CLIの利用を案内しています。

Dockgeのインストールと起動

それではDockgeをインストールしてみましょう。Dockge自身もDocker Composeを使って起動しますので、Ubuntu 26.04上にDocker EngineとDocker Composeプラグインをインストールします。以下のコマンドを実行してください。

$ sudo apt install -U -y docker.io docker-compose-v2

公式ドキュメントでは、Dockge本体を「/opt/dockge⁠⁠、Dockgeで管理するComposeスタックを「/opt/stacks」以下に配置する構成がデフォルトとなっていますので、本記事もそれに倣います。以下のコマンドでディレクトリを作成してください。

$ sudo mkdir -p /opt/{dockge,stacks}
$ cd /opt/dockge

続いて公式のcompose.yamlをダウンロードします。

$ sudo curl https://raw.githubusercontent.com/louislam/dockge/master/compose.yaml -o compose.yaml

compose.yamlは以下のような内容になっています。

services:
  dockge:
    image: louislam/dockge:1
    restart: unless-stopped
    ports:
      - 5001:5001
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data:/app/data
      - /opt/stacks:/opt/stacks
    environment:
      - DOCKGE_STACKS_DIR=/opt/stacks

Dockgeはホスト上のDockerを操作する必要があるため、⁠/var/run/docker.sock」をコンテナへマウントしています。また「/opt/stacks」が、Dockgeで管理するComposeスタックの保存先です。注意点として、このディレクトリはホスト側とコンテナ側で同じ絶対パスを指定する必要があります。たとえばホスト上のスタックの保存先を「/home/user/compose」に変更するのであれば、以下のようにコンテナ内のマウント先も変更し、ホストとパスを揃えます[1]

    volumes:
      - /home/user/compose:/home/user/compose
    environment:
      - DOCKGE_STACKS_DIR=/home/user/compose

準備ができたらDockgeを起動します。

$ sudo docker compose up -d

コンテナの状態も確認しておきましょう。

$ sudo docker compose ps
NAME              IMAGE               COMMAND                  SERVICE   CREATED         STATUS                           PORTS
dockge-dockge-1   louislam/dockge:1   "/usr/bin/dumb-init …"   dockge    18 seconds ago   Up 17 seconds (healthy)   0.0.0.0:5001->5001/tcp, [::]:5001->5001/tcp

DockgeはデフォルトではTCPの5001番ポートで待ち受けます。Webブラウザを起動して、⁠http://サーバーのIPアドレス:5001/」へアクセスしてください。

図1 Dockgeの初期画面

初回アクセス時にはDockgeへログインするためのユーザーを作成します。ユーザー名とパスワードを設定してログインしてください。

なおDockgeはDockerソケットを経由してホスト上のDockerを操作できます。つまりDockgeの管理画面を第三者に操作されると、実質的にDockerホストそのものを操作される可能性があります。5001番ポートをインターネットへ直接公開するような運用は絶対に避けましょう。DockgeはLAN内だけで使用する、あるいはリバースプロキシやVPNなどを組み合わせて適切にアクセスを制限するといった運用をお勧めします。

Dockgeでスタックを作成する

それではDockgeから簡単なDocker Composeスタックを作ってみましょう。ログイン後、画面左上の「Compose」をクリックします。

図2 Dockgeのメイン画面

スタックの作成画面が開くので、まずスタック名を入力してください。ここでは例として「nginx」という名前にします。

図3 新しいスタックを作成する

Dockgeにはcompose.yaml用のインタラクティブなエディタが組み込まれているため、Webブラウザ上で直接Composeファイルを編集できます。またGUIから、Dockerネットワークや環境変数の設定も可能です。

今回は画面右側の編集エリアに、以下の内容を入力してみましょう。

services:
  nginx:
    image: nginx:latest
    restart: unless-stopped
    ports:
      - "8080:80"
networks: {}

入力できたら「保存」をクリックしてください。

すると作成したスタックが、ページ左側にリストアップされます。いま作成したnginxスタックをクリックしてから「起動」をクリックしましょう。

図4 nginxのスタックを選択して起動する

起動時には、内部で実行されているDocker Composeの出力がリアルタイムに表示されます。また画面下部にある「ターミナル」には、コンテナのログが表示されます。このようにDocker Composeの実行結果と、コンテナのログを同じ画面で確認できるのもDockgeのメリットです。

スタックが起動したら、⁠http://サーバーのIPアドレス:8080/」へアクセスし、nginxのデフォルトページが表示されることを確認してみましょう。

図5 Dockgeで起動したnginxへアクセスする

また画面上のボタンからスタックの停止、再起動、更新なども実行できます。例えばDockerイメージを更新する場合、従来であればSSHでログインしてから、以下のコマンドを実行していました。

$ docker compose pull
$ docker compose up -d

ですがこうした作業は、Dockgeの画面から実行できます。スタックの画面で(必要であればcompose.yamlを書き換えた上で)⁠更新」ボタンをクリックすれば、イメージのpullとスタックの起動が行われます。

Docker Composeで家庭内のサービスをいくつも運用している場合、これだけでもかなり便利です。普段はcompose.yamlをGitなどで管理しつつ、ちょっとコンテナを再起動したい時やログを確認したい時だけDockgeを開く、といった使い方もできるでしょう。

docker runコマンドからスタックを作成する

単一のコンテナを起動するだけであれば、手で「docker run」コマンドを叩いてしまうことも多いでしょう。ですが筆者としては、単一のコンテナであってもComposeを使って起動した方がよいと考えています。理由としては、コンテナの構成やオプションをファイル化することで再現性を確保できることと、バージョン管理の恩恵に預かれることです。

とはいえ「docker run」コマンドであればシェルの履歴から呼び出せるのに、その複雑なオプションを、あらためてYAMLに書きくだすのが面倒くさいという人もいるでしょう。実はDockgeには、⁠docker run」コマンドをComposeスタックに変換する機能が用意されています。

例えば以下は、メディアサーバーであるJellyfinを起動する「docker run」コマンドの例です。

$ sudo docker run -d \
  --name jellyfin \
  --hostname jellyfin-media \
  --restart unless-stopped \
  -p 8096:8096/tcp \
  -p 7359:7359/udp \
  -e TZ=Asia/Tokyo \
  -e JELLYFIN_PublishedServerUrl=http://192.168.1.254:8096 \
  -e DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=0 \
  -v /srv/jellyfin/config:/config \
  -v /srv/jellyfin/cache:/cache \
  --health-cmd='curl --fail http://localhost:8096/health || exit 1' \
  --health-interval=30s \
  --health-timeout=10s \
  --health-retries=3 \
  --health-start-period=60s \
  jellyfin/jellyfin:latest

Dockgeのトップページにある「Docker Run to Compose」というテキストボックスに、このコマンドをそのままコピペしてください[2]

図6 実行していたdocker runコマンドをそのままコピペする

「Composeに変換」をクリックすると、新規スタックの作成画面に遷移し、入力したコマンドが自動的にcompose.yamlに変換されます。あとはスタック名をつけて保存するだけです。

図7 docker runからJellyfinのcompose.yamlが生成された

Webコンソールを使う

DockgeにはWebブラウザから任意のコマンドを実行できるコンソールも用意されています。これによりGUIのラッパーだけでなく、必要であればコマンドを直接叩けるわけです。ただしコンソールは、デフォルトでは無効になっています。というのも、DockgeコンテナはホストのDockerデーモンに接続しているため、危険で破壊的な操作も可能なためです。

Webコンソールを有効にしたい場合は、Dockgeのcompose.yamlに以下の環境変数を設定してから、Dockgeスタックを再起動してください。

    environment:
      - DOCKGE_ENABLE_CONSOLE=true

これでウィンドウ右上の「コンソール」から、Dockgeコンテナのrootのシェルを操作できるようになります。

図8 Webブラウザからコンソールを使う

ただし筆者が試したところ、Google Chromeでは問題なく動作したものの、Ubuntu標準のFirefoxからではコンソールに文字を入力できませんでした。Webコンソールを使う場合はブラウザとの相性に注意してください。

既存のスタックを登録する

すでにDocker Composeでサービスを運用している場合、こうした既存のcompose.yamlをそのまま利用できます。Dockge上でもう一度、スタックを作り直す必要はありません。Dockgeでは、管理するComposeファイルをスタックディレクトリ以下に、以下のようにサブディレクトリを作って配置します。

/opt/stacks/
├── nginx/
│   └── compose.yaml
├── nextcloud/
│   └── compose.yaml
└── vaultwarden/
    └── compose.yaml

たとえば既存のhomepage用のcompose.yamlがある場合は、⁠/opt/stacks/homepage/compose.yaml」として配置してください。その後Dockgeのメニューから「スタックフォルダをスキャン」を実行すると、スタックとして認識させることができます。公式のFAQでも、既存スタックを管理する場合は一度スタックを停止し、Composeファイルを「/opt/stacks/<スタック名>/compose.yaml」へ移動してからスキャンする方法が案内されています。

図9 右上のメニューからスタックフォルダをスキャンできる
図10 スキャンした後にブラウザをリロードすると、スタック一覧にhomepageが追加された

ただし既存環境を移行する際には、compose.yaml内の相対パスに注意してください。Dockerでは、下のようなバインドマウントがよく使われます。

volumes:
  - ./data:/var/lib/example

この「./data」はcompose.yamlが存在するディレクトリを基準にしています。compose.yamlだけを別の場所へ移動すると、これまでとは異なるディレクトリがコンテナへマウントされてしまう可能性があります。既存環境をDockgeへ移行する場合は、compose.yamlだけでなく、そのスタックで使用しているディレクトリ構造をまとめて移動するよう注意してください。


Dockgeを使うと、Docker Composeで管理している複数のスタックをWebブラウザから一覧し、起動や停止、ログの確認、compose.yamlの編集、Dockerイメージの更新といった日常的な操作を簡単に行えます。Dockgeのよいところは、Docker ComposeをDockge独自の管理方法へ置き換えるのではなく、従来のcompose.yamlはそのままに、ラッパーとしてのGUIをかぶせている点にあります。Dockgeを導入したからといって、これまで使っていた「docker compose」コマンドを捨てる必要はありません。また本記事では紹介しませんでしたが、Dockgeエージェントと呼ばれる機能を使えば、複数のDockerホストを単一のDockgeから管理できます。

既存のCompose環境を大きく変更せずに導入できますので、Docker Composeで複数のサービスを運用しているのであれば、ぜひ試してみてください。

おすすめ記事

記事・ニュース一覧