484 lines
18 KiB
Markdown
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 |
|