DockerコンテナをGUIで管理するツールとしては「Portainer」がほぼ一強の状態でした。そんな中「誰もが使える最新のDocker管理ツール」をうたい文句とする「Dockhand」が登場しました。Dockhandは個人利用であれば無料で使えるうえ、Dockerコンテナの作成や管理・監視などを直感的なインターフェースで行えるように設計されているため、初心者から上級者まで幅広く利用できるツールとなっています。

Dockhand - Modern Docker Management

https://dockhand.pro/#screenshots

◆導入

Portainerと同様にDockhandもまたDocker上で動作させることが可能です。Dockerで起動させる場合は以下のコマンドを実行します。

docker run -d \
--name dockhand \
--restart unless-stopped \
-p 3000:3000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v dockhand_data:/app/data \
fnsys/dockhand:latest

Docker Composeコマンドを使用することもでき、その場合は以下の内容で「docker-compose.yaml」ファイルを作成します。

services:
dockhand:
image: fnsys/dockhand:latest
container_name: dockhand
restart: unless-stopped
ports:
- 3000:3000
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- dockhand_data:/app/data

volumes:
dockhand_data:

Docker Composeコマンドを使用する場合、デフォルトのSQLiteに代えてPostgreSQLを使用するといったことも簡単にできます。その場合は以下の内容で「docker-compose.yaml」ファイルを作成します。

services:
postgres:
image: postgres:16-alpine
environment:
POSTGRES_USER: dockhand
POSTGRES_PASSWORD: changeme
POSTGRES_DB: dockhand
volumes:
- postgres_data:/var/lib/postgresql/data

dockhand:
image: fnsys/dockhand:latest
ports:
- 3000:3000
environment:
DATABASE_URL: postgres://dockhand:changeme@postgres:5432/dockhand
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- dockhand_data:/app/data
depends_on:
- postgres

volumes:
postgres_data:
dockhand_data:

なお、動作環境の最小構成は以下の通りです。

Dockerエンジン20.20以降Docker API1.41以降メモリ512MB以上(推奨1GB以上)ブラウザChrome・Firefox・Safari・EdgeデータベースSQLite(デフォルト)もしくはPostgreSQL 14以降

◆ダッシュボード

起動時に表示されるダッシュボードの外観は以下の通りです。



管理下にあるDocker環境については各々がタイルとして表示され、それぞれのタイルには重要な情報が一目でわかるように表示されています。

・ヘッダー:環境名・アイコン・接続状態

・コンテナ数:稼働中・停止中・総コンテナ数

・リソースメトリクス:プログレスバー・CPU使用率・メモリ使用量

・健全性状態:異常・再起動中のコンテナに対する警告バナー

・アクティビティ:本日のイベントならびに最近のアクティビティ

・コンテナ一覧:CPU使用率順に並べ替えられたコンテナの一覧(大きなタイル限定)

アイコンが示すステータスは以下の通りです。

・盾(緑):脆弱性スキャンが有効

・グラフ(アンバー):コンテナイベント追跡中

・切断(赤):アクセス不能

名前で表示対象を絞り込むこともできます。



◆コンテナ

Containersのページでは環境全体にわたるすべてのDockerコンテナを包括的に管理できます。



リストビューに表示されている個々のコンテナについて、以下の情報を表示します。

・Name:コンテナ名(クリックで詳細表示)

・Image:コンテナで使用されているイメージタグ

・State:状態(実行中・停止中・一時停止中・再起動中・作成済み)

・Health:ヘルスチェックの状態(設定されている場合)

・Uptime:コンテナの起動/停止からの経過時間

・CPU %:リアルタイムCPU使用率

・Memory:現在のメモリ使用量

・Network I/O:受信/送信バイト数

・Disk I/O:読み取り/書き込みバイト数

・IP Address:コンテナのIPアドレス

・Ports:公開ポートマッピング(ホスト:コンテナ)

・Stack:Composeプロジェクト名(スタックの一部である場合のみ)

・Actions:操作可能なアクションのアイコン(起動・停止・再起動・削除・ログ表示など)

「Actions」列のアイコンをクリックすると、以下のアクションを実行できます。

・Start:停止中のコンテナを起動する

・Stop:実行中のコンテナを停止する(確認あり)

・Pause:実行中のコンテナを一時停止する

・Restart:コンテナを再起動する(確認あり)

・Inspect:詳細なコンテナ設定を表示する

・Browse Files:ファイルブラウザを表示する(実行中のコンテナのみ)

・Edit:コンテナ設定を編集する

・Logs:ログパネルを表示する

・Terminal:対話型シェルを開く

・Delete:コンテナを削除する(確認あり)

コンテナを更新したい場合は、「Check for updates」ボタンをクリックして更新のあるコンテナをチェック後、「Update all」ボタンを押すと更新のあるすべてのコンテナに対して更新が実行されます。



◆自動更新のスケジュール管理

常に最新のコンテナを実行したいという要望に応えるため、Dockhandにはコンテナの自動更新機能が搭載されています。自動更新スケジュールの一覧表示および管理はスケジュールのページで行います。



自動更新を有効にすると、Dockhandは定期的にDocker Hubやその他のレジストリをチェックし、新しいイメージが利用可能になった場合に自動的にコンテナを更新します。 自動更新の設定はコンテナごとに行うことができ、更新の頻度やタイミングをカスタマイズすることも可能です。

・Daily:1日に1回指定した時刻に更新

・Weekly:指定した曜日・時刻に更新

・Custom:cron形式でスケジュールを指定

脆弱性スキャンが有効になっている場合、「脆弱性基準」を設定することで自動更新がブロックされるタイミングを制御でき、最新の状態を維持することと新たに導入されるセキュリティ問題の回避とのバランスを細かく制御することが可能です。利用可能な脆弱性基準は以下の通りです。

脆弱性基準更新ブロックの条件対象Never blockブロックなし、常に更新を実行重要度の低いコンテナ、開発環境Any vulnerability新規イメージに脆弱性(重大・高・中・低)が存在する場合セキュリティ重視のゼロトレランス環境Critical or High新規イメージに重大または高深刻度の脆弱性がある場合本番環境(推奨)Critical only新規イメージに重大深刻度の脆弱性がある場合バランス重視、高・中・低を許容More than current新規イメージの脆弱性総数が現行イメージを上回る場合漸進的改善アプローチ

◆スタック

Stacksのページでは、Docker Composeを使用してデプロイされたスタックを管理できます。もちろんスタックの作成・編集・削除も可能です。



スタックを作成するには「Create」ボタンをクリックするとYAMLエディターが開くので、docker-compose.yamlファイルの内容を貼り付けて「Create」ボタンを押します。作成済みのスタックを編集する場合は、スタック名をクリックしてYAMLエディターを開き、内容を編集して「Save & Apply」ボタンを押します。



表示を「Graph」に切り替えると、スタック内のサービス間の関係を視覚的に把握できます。



◆イメージ

Imagesのページでは、Dockerホスト上に存在するすべてのDockerイメージを管理できます。



リストビューに表示されている個々のイメージについて、以下の操作ができます。

・Run:このイメージから新しいコンテナを作成する

・Scan:脆弱性をスキャンする(スキャナーが設定されている場合のみ)

・Tag:このイメージに新しいタグを追加する

・Push:設定済みのレジストリにプッシュする

・Export:tar/tar.gzアーカイブとしてダウンロードする

・History:イメージのレイヤー履歴を表示する

・Delete:イメージを削除する

また、「Prune」ボタンをクリックすると不使用のイメージを削除できます。

◆アクティビティログ

すべての環境におけるDockerコンテナイベントをリアルタイムで追跡できます。



ログのイベントタイプには以下のものがあります。

・create:コンテナ作成

・start:コンテナ起動

・stop:コンテナ停止

・die:コンテナ終了

・kill:コンテナ強制終了

・restart:コンテナ再起動

・pause:コンテナ一時停止

・unpause:コンテナ一時停止解除

・oom:メモリ不足

・health_status:ヘルスチェック結果

また、ログの表示は以下の条件でフィルタリングできます。

・Container name:テキスト検索

・Event type:特定のイベントタイプを選択

・Environment:環境でフィルタリング

・Labels:環境ラベルでフィルタリング

・Date range:プリセットまたはカスタム範囲

◆まとめ

自宅などプライベートな環境でセルフホスティング可能であればDockhandは非常に魅力的な選択肢であるといえます。Portainerと比較しても遜色ない機能を備えており、さらに自動更新機能や脆弱性スキャン機能はセキュリティ面で安心感をもたらします。直感的なインターフェースと豊富な管理機能を持つDockhandは幅広いユーザーに適したツールと言えるでしょう。