Files
hermes-recovery/references/docker-management-research.md

484 lines
18 KiB
Markdown

# Docker Management — Multi-Host Tool Research
**Date:** 2026-07-09
**Context:** IT Pro Partner runs Docker Compose stacks across multiple servers (Core/netcup, ai.itpropartner.com, docker, unms, etc.). We need a single tool to manage all containers across hosts. Mixed environment of Docker Compose stacks (no Swarm/Kubernetes).
---
## Evaluation Criteria (Priority Order)
1. **Recovery manual completeness** — can Germaine use it without Sho'Nuff?
2. **Multi-host support** — can it see/manage containers on different servers?
3. **CLI/API access** — can I script against it from Hermes?
4. **Self-hosted** — runs on our infrastructure, not SaaS
5. **Free/open source** — no subscription fees for personal use
6. **Web GUI** — nice bonus, not required
7. **Webhook support** — can trigger actions from external events
---
## Tool Comparison Table
| Feature | Portainer | Arcane | Komodo | Dockge | Dockhand | Lazydocker |
|---|---|---|---|---|---|---|
| **Self-hosted** | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ❌ (local TUI) |
| **Free tier** | 3 nodes BE free | ✅ 100% FOSS | ✅ 100% FOSS | ✅ 100% FOSS | ✅ Homelab free | ✅ FOSS |
| **Multi-host** | ✅ Agent-based | ✅ Agent-based | ✅ Agent-based | ✅ Agents (v1.4+) | ✅ Agent/TLS | ❌ Single host |
| **REST API** | ✅ Full API | ✅ OpenAPI 3.1 | ✅ REST + WebSocket | ❌ No API | ⏳ Roadmap (distant) | ❌ |
| **Web GUI (1-5)** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ❌ (TUI) |
| **Setup complexity** | Easy | Easy | Medium | Easy | Easy | Very Easy |
| **License** | Proprietary (BE) / MIT (CE) | BSD-3-Clause | GPL-3.0 | MIT | BSL 1.1 → Apache 2.0 (2029) | MIT |
| **Stars** | ~30k | 6.3k | ~3k | 23.7k | 5.1k | 38.7k |
| **Webhooks** | ✅ Yes | ✅ Yes | ✅ Yes | ❌ No | ✅ Yes | ❌ No |
| **Compose focus** | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Compose-only | ✅ Yes | ❌ Container focus |
| **Swarm support** | ✅ Yes | ✅ Yes | ✅ Yes | ❌ No | ❌ Not mentioned | ❌ No |
| **K8s support** | ✅ Yes | ❌ No | ❌ No | ❌ No | ❌ No | ❌ No |
---
## 1. Portainer
**Website:** https://www.portainer.io/
**Docs:** https://docs.portainer.io/
**GitHub:** https://github.com/portainer/portainer
### Overview
Industry-standard Docker management UI. Mature, battle-tested, vast ecosystem. Used by teams of all sizes.
### Pricing
- **Business Edition (BE) — 3 nodes free forever** (full features, no time limit, requires annual license key renewal but $0)
- **Home & Student** — $155/yr for up to 15 nodes (non-commercial only)
- **Business Starter** — $105/mo for 5 nodes (commercial)
- **Business Scale** — $209/mo for 5 nodes
- **Community Edition (CE)** — Free forever but missing RBAC, GitOps, templates, and other BE features
### Multi-host Support
**Yes** — via **Portainer Agent** (lightweight Go daemon on each remote host). Agent connects to Portainer Server. Also supports Docker API over TCP/TLS directly.
### REST API
**Excellent** — comprehensive REST API with Swagger/OpenAPI docs. All UI actions available via API. Official Go client library.
### Setup Complexity: **Easy**
```bash
docker run -d -p 9001:9001 --name portainer_agent --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/docker/volumes:/var/lib/docker/volumes \
portainer/agent:latest
```
One command per remote host, add environment in Portainer UI.
### Recovery Documentation: **Excellent**
- Extensive official docs at https://docs.portainer.io/
- Backup/restore guides: https://docs.portainer.io/advanced/backup
- Large community, thousands of tutorials
- **Germaine-friendly:** Yes — the UI is intuitive, and the docs are thorough
### Pros
- Most mature, most documented
- Free 3-node BE tier covers our needs
- Comprehensive REST API for Hermes scripting
- Agent auto-updates, mTLS support
- Webhooks for GitOps/auto-deploy
### Cons
- Beyond 3 nodes requires payment
- Can feel heavy/bloated for simple Compose management
- CE version lacks features (use BE free tier instead)
- Proprietary license (BE requires license key renewal)
---
## 2. Arcane ⭐ (Strong Contender)
**Website:** https://getarcane.app/
**Docs:** https://getarcane.app/docs/setup/installation
**GitHub:** https://github.com/getarcaneapp/arcane
**Live Demo:** https://demo.getarcane.app/
### Overview
Modern Docker management UI built with SvelteKit (frontend) + Go (backend). BSD-3-Clause licensed. Clean, fast, well-designed. Gaining traction rapidly (6.3k stars, 70 contributors).
### Pricing
- **100% free and open source** — BSD-3-Clause license
- No paid tiers, no feature gating
- Mobile app (iOS TestFlight beta) — also free
### Multi-host Support
**Yes** — via **Arcane Agent** on remote hosts. Two connection modes:
- **Direct** — Manager connects to Agent on TCP 3553 (requires inbound port)
- **Edge** — Agent dials out to Manager (for NAT/firewall, no inbound port needed)
- Transport modes: gRPC tunnel or periodic polling (poll mode for idle environments)
### REST API
**Excellent** — "Fully Documented API" built with Huma on Gin, featuring auto-generated OpenAPI 3.1 documentation. Go client library available.
### Setup Complexity: **Easy**
```bash
# Manager (one line)
docker run -d --name arcane -p 3552:3552 -v arcane_data:/data ghcr.io/getarcaneapp/manager:latest
# Agent on each remote host
docker run -d --name arcane-agent -p 3553:3553 \
-v /var/run/docker.sock:/var/run/docker.sock \
-e AGENT_MODE=true \
-e AGENT_TOKEN=<token> \
-e MANAGER_API_URL=http://manager:3552 \
ghcr.io/getarcaneapp/agent:latest
```
### Recovery Documentation: **Good**
- Documentation website at getarcane.app
- Active Discord community
- Growing collection of guides and tutorials
- **Germaine-friendly:** Yes — modern, intuitive UI, good docs
### Key Features
- Container, image, volume, network management
- Docker Compose stack management
- Docker Swarm support
- Image vulnerability scanning (built-in)
- Image building from Dockerfiles
- Resource monitoring (CPU, memory, network)
- RBAC and OIDC/SSO
- GitOps lifecycle hooks
- iOS mobile app
- Webhook triggers
### Pros
- 100% free, no paid tiers ever (BSD-3-Clause)
- Modern, fast, beautiful UI (SvelteKit)
- Excellent REST API with OpenAPI 3.1
- Edge mode for NAT/firewall'd hosts
- Active development (3k+ commits, frequent releases)
- Growing community
### Cons
- Newer project (less battle-tested than Portainer)
- Smaller community (but growing fast)
- No Kubernetes support (not needed for our use case)
- No LDAP/AD (OIDC/SSO available)
---
## 3. Komodo ⭐ (Strong Contender)
**Website:** https://komo.do/
**Docs:** https://komo.do/docs/intro
**GitHub:** https://github.com/moghtech/komodo
**Blog Guide:** https://blog.saltdata.ro/managing-docker-komodo
### Overview
API-first build and deployment system written in Rust (backend) + TypeScript (frontend). GPL-3.0 licensed. Core + Periphery agent architecture. Includes CI/CD pipeline capabilities alongside Docker management.
### Pricing
- **100% free and open source** — GPL-3.0
- No paid tiers, no feature gating
- Unlimited servers — "There is no limit to the number of servers you can connect, and there never will be."
### Multi-host Support
**Yes** — via **Periphery** agent on each remote host. Periphery communicates with Core over a bi-directional WebSocket connection. Can run as systemd service, Docker container, or standalone binary.
### REST API
**Excellent** — REST + WebSocket API with multiple client libraries:
- Komodo CLI (built-in)
- Rust crate (`komodo_client`)
- NPM package (`komodo_client`)
- curl examples in docs
### Setup Complexity: **Medium**
- Core requires MongoDB (or FerretDB/Postgres)
- Docker Compose file with MongoDB + Core
- Periphery agent install via Python script or Docker
- More moving parts than Portainer/Arcane
### Recovery Documentation: **Good**
- Well-organized docs at komo.do
- Built-in backup/restore CLI
- **Germaine-friendly:** Mostly — UI is clean, but setup is more involved
### Key Features
- Docker container and Compose stack management
- Docker Swarm management
- Image building from Dockerfiles (supports AWS EC2 spot instances for build capacity)
- Git repository management on remote servers
- Resource Syncs (GitOps) — auto-deploy on git push
- Procedures — multi-step automation workflows with scheduling
- Server resource monitoring (CPU, RAM, disk)
- RBAC with granular permissions
- OAuth/OIDC authentication
- Full audit trail of every change
- Webhook triggers
### Pros
- Feature-rich — more than just Docker management (builds, CI/CD, automation)
- Excellent API with first-class client libraries (ideal for Hermes scripting)
- Truly unlimited servers
- GPL-3.0 open source
- Active development
- Backup/restore built-in
### Cons
- Heavier setup (needs MongoDB or FerretDB/Postgres)
- More complex than needed if we only need Docker management (CI/CD features may go unused)
- Smaller community than Portainer
- Rust backend — harder to extend/modify than Go
---
## 4. Dockge
**Website:** https://github.com/louislam/dockge
**README:** https://github.com/louislam/dockge/blob/master/README.md
### Overview
Focused Docker Compose stack manager by the creator of Uptime Kuma. MIT licensed. Laser-focused on compose.yaml management rather than general Docker management. Very popular (23.7k stars).
### Pricing
- **100% free and open source** — MIT license
### Multi-host Support
**Yes** — since v1.4.0, supports multiple agents. Can manage stacks from different Docker hosts in one interface.
### REST API
**No documented REST API** — UI-focused tool. No API for external scripting.
### Setup Complexity: **Easy**
```yaml
services:
dockge:
image: louislam/dockge:latest
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
```
### Recovery Documentation: **Minimal**
- README only, no dedicated docs site
- Basic FAQ in README
- **Germaine-friendly:** Partially — UI is simple but recovery docs are thin
### Key Features
- Create/Edit/Start/Stop/Restart compose.yaml stacks
- Interactive compose.yaml editor
- Interactive web terminal for containers
- Multi-agent support (v1.4+)
- Image update button
- Stack folder scanning
### Pros
- Very simple, focused tool (does one thing well)
- Beautiful, reactive UI
- Lightweight and fast
- Large community (23.7k stars)
### Cons
- **Compose-only** — cannot manage individual containers, networks, volumes outside compose
- **No REST API** — cannot be scripted from Hermes
- No webhook support
- No RBAC/authentication (single-user only)
- No monitoring or alerting
- README-only documentation
- "Can I manage existing stacks?" — requires manual file moves
---
## 5. Dockhand
**Website:** https://dockhand.pro/
**Manual:** https://dockhand.pro/manual/
**GitHub:** https://github.com/Finsys/dockhand
### Overview
Modern Docker management platform with polished Svelte UI. BSL 1.1 licensed (converts to Apache 2.0 in 2029). The code IS source-available but not truly open-source in the free-software sense. 5.1k stars.
### Pricing
- **Free tier** — all features for homelab use (no RBAC, no LDAP, no commercial use)
- **SMB** — $499/host/year
- **Enterprise** — $1,499/host/year
### Multi-host Support
**Yes** — three methods:
1. **Local Docker socket** (/var/run/docker.sock)
2. **Remote TCP connections** with TLS
3. **Hawser agent** — lightweight agent for NAT/firewall traversal (similar to Portainer Edge / Arcane Edge)
### REST API
⚠️ **On roadmap ("distant future")** — No working API today. API keys listed as "distant future" on the roadmap. OpenAPI/Swagger also "distant future."
### Setup Complexity: **Easy**
```bash
docker run -d --name dockhand -p 3000:3000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v dockhand_data:/app/data \
fnsys/dockhand:latest
```
### Recovery Documentation: **Good**
- Full user manual at dockhand.pro/manual
- Well-organized documentation
- **Germaine-friendly:** Yes — polished UI, good manual
### Key Features
- Container operations (start/stop/restart/create)
- Visual Compose editor
- Git repository deployment with webhook auto-sync
- Vulnerability scanning (Grype/Trivy) with safe-pull protection
- Live CPU/memory metrics
- Real-time log streaming
- OIDC/SSO (free)
- MFA (TOTP)
- Hawser agent for NAT traversal
- RBAC and LDAP/AD (Enterprise only)
- Multi-environment switching
### Pros
- Most polished modern UI (5/5)
- 30-second deployment
- Free for homelab use
- Hawser agent handles NAT/firewall well
- Good documentation
### Cons
- **No REST API** — API/API keys are "distant future" on roadmap. Cannot be scripted from Hermes
- BSL 1.1 license — not truly open source (converts to Apache 2.0 in 2029)
- Paid beyond homelab ($499/host/yr for commercial use)
- RBAC and LDAP/AD only in Enterprise tier ($1,499/host/yr)
- Smaller community (5.1k stars)
- Relatively new project (165 commits)
---
## 6. Lazydocker
**Website:** https://lazydocker.com/
**GitHub:** https://github.com/jesseduffield/lazydocker
### Overview
Terminal TUI (Text User Interface) for Docker. MIT licensed. Extremely popular (38.7k stars). Written in Go by the same author as Lazygit. Runs as a local process on a single host.
### Pricing
- **100% free and open source** — MIT license
### Multi-host Support
**No** — runs locally on each host. Cannot manage remote Docker hosts from one interface. Each host needs its own Lazydocker instance (or SSH into each host).
### REST API
**No** — it's a terminal application, not a server.
### Setup Complexity: **Very Easy**
```bash
# Install
brew install lazydocker # macOS
# Or Docker one-liner
docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock \
lazyteam/lazydocker
```
### Recovery Documentation: **Minimal**
- README with basic usage
- Keyboard shortcuts reference
- **Germaine-friendly:** Terminal-only — requires comfort with CLI/TUI
### Pros
- Very lightweight and fast
- Great for quick SSH-and-check sessions
- Keyboard-navigable, efficient for power users
- No server infrastructure needed
### Cons
- **Single host only** — cannot manage our multi-server setup
- **No API** — cannot be scripted from Hermes
- **No web GUI** — terminal only (not Germaine-friendly)
- No persistent state or history
- No user management or RBAC
---
## Recommendation: 🦎 Komodo ⭐
### Best Fit for IT Pro Partner
Given our criteria and environment:
| Criterion | Winner | Rationale |
|---|---|---|
| Recovery completeness | **Portainer / Komodo** | Both have excellent docs. Komodo has built-in backup CLI. |
| Multi-host support | **All (except Lazydocker)** | All support agents. Pick based on other criteria. |
| CLI/API access | **Komodo** | REST + WebSocket + 3 client libraries (CLI, Rust, npm) + curl examples. Best API story. |
| Self-hosted | **All (except Lazydocker)** | All run on our infra. |
| Free/open source | **Arcane / Komodo** | Both are 100% free with permissive licenses. |
| Web GUI | **Dockhand / Portainer** | Both have polished UIs. Portainer is more mature. |
| Webhooks | **Komodo / Portainer / Arcane** | All three support webhooks. |
### Top 3 Contenders (Ranked)
#### 1st: **Komodo** 🏆
- **Why:** Best API story (REST + WS + multiple client libs) makes it ideal for Hermes scripting. Core + Periphery architecture handles our mixed environment. GPL-3.0, truly free. Built-in backup/restore. Webhook triggers for GitOps. Unlimited servers. Server monitoring included.
- **Trade-off:** Heavier setup (needs MongoDB). More features than we need if we only want Docker management.
#### 2nd: **Arcane** 🥈
- **Why:** 100% free BSD-3-Clause. Beautiful modern UI. Great multi-host support (Direct + Edge modes). Solid OpenAPI 3.1 REST API. Lightweight Go backend. Built-in vulnerability scanning. iOS mobile app.
- **Trade-off:** Newer project with smaller community. Less documentation than Portainer.
#### 3rd: **Portainer** 🥉
- **Why:** Most mature, best documented, largest community. Free 3-node BE tier covers our needs. Comprehensive REST API. Agent is rock-solid.
- **Trade-off:** Beyond 3 nodes costs money. Covers our current needs but doesn't scale free. Proprietary license.
### Why not the others?
- **Dockge:** No API, no webhooks, compose-only. Good for one-off single-user compose management but not for our multi-host, scriptable needs.
- **Dockhand:** No API (roadmap item, "distant future"). BSL license. Paid for commercial use. Great UI but cannot be scripted by Hermes.
- **Lazydocker:** Single host only. Terminal-only. Good for quick checks but not a management platform.
### Implementation Suggestion
Start with **Komodo** for the API-first multi-host management. If the MongoDB dependency is a concern, **Arcane** is a strong alternative that's lighter to deploy.
### Quick Deploy Comparison
**Komodo** (on management server):
```yaml
# docker-compose.yml for Komodo Core
services:
mongo:
image: mongo
restart: unless-stopped
volumes:
- ./data/mongo-data:/data/db
core:
image: ghcr.io/moghtech/komodo-core:2
restart: unless-stopped
ports:
- 9120:9120
depends_on:
- mongo
volumes:
- ./backups:/backups
- ./keys:/config/keys
```
**Komodo Periphery** (on each managed host):
```bash
curl -sSL https://raw.githubusercontent.com/moghtech/komodo/main/scripts/setup-periphery.py \
| python3 - \
--core-address="https://core.itpropartner.com" \
--connect-as="$(hostname)" \
--onboarding-key="O-..."
```
---
## Links Summary
| Tool | Website | Docs | GitHub |
|---|---|---|---|
| Portainer | https://www.portainer.io/ | https://docs.portainer.io/ | https://github.com/portainer/portainer |
| Arcane | https://getarcane.app/ | https://getarcane.app/docs/setup/installation | https://github.com/getarcaneapp/arcane |
| Komodo | https://komo.do/ | https://komo.do/docs/intro | https://github.com/moghtech/komodo |
| Dockge | https://github.com/louislam/dockge | README only | https://github.com/louislam/dockge |
| Dockhand | https://dockhand.pro/ | https://dockhand.pro/manual/ | https://github.com/Finsys/dockhand |
| Lazydocker | https://lazydocker.com/ | README only | https://github.com/jesseduffield/lazydocker |