Portainerは、Docker・Docker Swarm・Kubernetes・ACIなど複数のコンテナオーケストレーターを1つのGUIとAPIから管理できるサービス配信プラットフォームです。単一のコンテナとして起動し、コンテナ・イメージ・ボリューム・ネットワークなどのリソースをまとめて操作できます。本リポジトリはCommunity Edition(CE)のソースで、Business Edition向けの拡張機能への案内も含まれています。
バックエンドは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`)で行われます。
- STEP 01
公式ドキュメントの手順に従いPortainerコンテナを1つ起動すると、初回アクセス時に管理者パスワード設定画面が表示されます(`resolveSetupToken`のロジックにより、管理者未作成時のみセットアップトークンが発行されます)。
- STEP 02
ログイン後はDocker・Swarm・Kubernetesなど接続先環境を選び、コンテナ・イメージ・ボリュームなどのリソース一覧がGUI上に表示されます。
- STEP 03
`make generate-api`を実行すると、Go側のSwagger注釈からOpenAPI定義を経てTypeScript SDKが再生成される流れを、実際にファイル差分として確認できます。
- STEP 04
開発モードでは`.air.toml`の設定により、`api`配下のGoファイル変更を検知して`make build-server`が自動実行され、ホットリロード的な開発体験が得られます。
- STEP 05
Storybookを起動すると`app/**/*.stories.tsx`を対象にUIコンポーネント単体を確認でき、`__mocks__`によりモックされたAPIレスポンスで動作を試せます。
- STEP 06
バックアップ・ロールバック機能を試すと、`api/backup`と`api/datastore/backup.go`のロジックにより、BoltDBのスナップショットからの復元が行える様子が確認できます。
実行環境に応じて、Docker単体・Docker Swarmクラスタ・Kubernetesクラスタのリソースを1つのWeb UIから横断的に確認・操作できる管理コンソールが手に入ります。開発者視点では、Go製APIとReact製フロントエンドが分離された典型的なモノレポ構成、およびSwagger起点のAPI型生成パイプラインを学べます。
READMEに「Current - 2 docker versions only」と明記されており、古いDockerバージョンでは動作保証がありません。
Business Edition(BE)向けの高度な機能(RBACやサポートなど)はCEには含まれず、README内のリンク先で別途案内されている点に注意が必要です。
初回起動時にMatomo Analyticsによる匿名利用状況の収集がデフォルトで有効になっており、無効化は起動時の選択操作が必要です。
BoltDBという組み込みデータベースを採用しているため、大規模・高可用性が求められる環境では別途検討が必要と考えられますが、これはファイル情報からの推測であり明言はされていません。
Docker・Swarm・Kubernetesを横断して1つのGUIで管理したい個人開発者や小〜中規模チームには適した選択です。Go製APIとReact製フロントエンド、BoltDBベースのデータ永続化、Swagger起点のAPI型生成パイプラインという構成は、ソースツリーとREADMEの記述から一貫して確認でき、大きな矛盾は見当たりません。ただしBusiness Edition限定機能や大規模運用時の挙動は本リポジトリの範囲外情報が多く、そこは公式ドキュメントでの追加確認が望ましいです。