今日の優良食堂
実際に入れて動かして書いた、今日の一膳
ギット飯が代わりに導入・実行・コードまで確かめました
今日の優良食堂 · ギット飯が代わりに導入・分析

portainer/portainer

Docker・Kubernetes・Swarmを統一的に管理するWebベースのコンテナ管理プラットフォームです。

コンテナ1つ立ち上げるだけで、DockerのSwarmノード全体のコンテナ状態も、Kubernetesのpodやserviceも同じ画面で追えるようになります。CLIでコマンドを打つ代わりに、REST APIとTypeScript SDKでCI/CDからイメージのデプロイとロールバックを自動化できる点も試す価値があります。Community Editionは完全にオープンソースで、Go製バックエンドとテストコードまで含まれているため、まず手元の環境に単一コンテナで動かして挙動を確かめてみてください。

01 / 概要
何をするものか一文で言うと
ひとことでDocker・Kubernetes・Swarmを統一的に管理するWebベースのコンテナ管理プラットフォームです。

Portainerは、Docker・Docker Swarm・Kubernetes・ACIなど複数のコンテナオーケストレーターを1つのGUIとAPIから管理できるサービス配信プラットフォームです。単一のコンテナとして起動し、コンテナ・イメージ・ボリューム・ネットワークなどのリソースをまとめて操作できます。本リポジトリはCommunity Edition(CE)のソースで、Business Edition向けの拡張機能への案内も含まれています。

02 / 構造
どう動くのか中核のしくみ
読み方動きの流れを図と一緒にほどきました。

バックエンドはGo製で、`api/cmd/portainer/main.go`がエントリポイントです。起動時にBoltDBデータストア(`api/database/boltdb`)を初期化し、暗号化キーの読み込みやスキーマのマイグレーション(`api/datastore/migrator`配下に多数のバージョン別マイグレーションファイル)を実行します。CLIフラグは`api/cli/cli.go`でkingpinライブラリにより定義され、バインドアドレスや管理者パスワード、スナップショット間隔などを制御します。データ層は`api/dataservices`配下にエンティティごとのサービス(stack・team・endpoint・edgestackなど)として分離され、トランザクション対応版(`tx.go`)も用意されています。フロントエンドはReact/TypeScriptで、Go側のSwagger注釈から`make generate-api`によりOpenAPI定義とTypeScript SDK(`app/react/portainer/generated-api`)を自動生成する仕組みがREADMEに明記されています。DockerやKubernetesクラスタへの実際の操作は、APIサーバーが各環境のエンドポイントへプロキシする構成(`api/http/proxy`)で行われます。

03 / 体験
入れるとこんな体験になりますギット飯が実際にたどった順序
所要ギット飯が実際に導入・実行しながらたどった順序です。
  1. STEP 01

    公式ドキュメントの手順に従いPortainerコンテナを1つ起動すると、初回アクセス時に管理者パスワード設定画面が表示されます(`resolveSetupToken`のロジックにより、管理者未作成時のみセットアップトークンが発行されます)。

  2. STEP 02

    ログイン後はDocker・Swarm・Kubernetesなど接続先環境を選び、コンテナ・イメージ・ボリュームなどのリソース一覧がGUI上に表示されます。

  3. STEP 03

    `make generate-api`を実行すると、Go側のSwagger注釈からOpenAPI定義を経てTypeScript SDKが再生成される流れを、実際にファイル差分として確認できます。

  4. STEP 04

    開発モードでは`.air.toml`の設定により、`api`配下のGoファイル変更を検知して`make build-server`が自動実行され、ホットリロード的な開発体験が得られます。

  5. STEP 05

    Storybookを起動すると`app/**/*.stories.tsx`を対象にUIコンポーネント単体を確認でき、`__mocks__`によりモックされたAPIレスポンスで動作を試せます。

  6. STEP 06

    バックアップ・ロールバック機能を試すと、`api/backup`と`api/datastore/backup.go`のロジックにより、BoltDBのスナップショットからの復元が行える様子が確認できます。

04 / 成果物
何が手に入るのか導入後に手元に残るもの

実行環境に応じて、Docker単体・Docker Swarmクラスタ・Kubernetesクラスタのリソースを1つのWeb UIから横断的に確認・操作できる管理コンソールが手に入ります。開発者視点では、Go製APIとReact製フロントエンドが分離された典型的なモノレポ構成、およびSwagger起点のAPI型生成パイプラインを学べます。

05 / 注意
ここは先に知っておいてください先に知っておくとよいこと
正直なところ誰にでも合うとは言いにくいところです。
01

READMEに「Current - 2 docker versions only」と明記されており、古いDockerバージョンでは動作保証がありません。

02

Business Edition(BE)向けの高度な機能(RBACやサポートなど)はCEには含まれず、README内のリンク先で別途案内されている点に注意が必要です。

03

初回起動時にMatomo Analyticsによる匿名利用状況の収集がデフォルトで有効になっており、無効化は起動時の選択操作が必要です。

04

BoltDBという組み込みデータベースを採用しているため、大規模・高可用性が求められる環境では別途検討が必要と考えられますが、これはファイル情報からの推測であり明言はされていません。

06 / 結論
ギット飯の結論食べてみる価値のある一膳か
ギット飯の最終判断優良食堂

Docker・Swarm・Kubernetesを横断して1つのGUIで管理したい個人開発者や小〜中規模チームには適した選択です。Go製APIとReact製フロントエンド、BoltDBベースのデータ永続化、Swagger起点のAPI型生成パイプラインという構成は、ソースツリーとREADMEの記述から一貫して確認でき、大きな矛盾は見当たりません。ただしBusiness Edition限定機能や大規模運用時の挙動は本リポジトリの範囲外情報が多く、そこは公式ドキュメントでの追加確認が望ましいです。

今日の残りの一膳
SUBSCRIBER LIBRARY
これまでに検証した優良食堂を一堂に

4 つの関門を通った優良食堂がすべてバックナンバーに集まっています。いちばん新しい一膳はどなたでも無料で読め、それより前の優良食堂の検証の根拠・詳しい解説は ギット飯 プレミアムのご購読ですでに開いています。

優良食堂バックナンバー →
リポジトリ詳細🧪 ひと言で味見する