Docker Compose for your entire fleet.
Deploy, update, monitor, and roll back Docker applications across Raspberry Pis, mini PCs, and Linux edge devices. No Kubernetes. No inbound firewall holes. No mandatory proprietary OS.
curl -fsSL https://simpledockerops.com/install | sudo sh - Keep your Linux and your Docker Engine
- Releases pinned to image digests
- Health gates and rollback on every plan
- Desired
- collector 1.8.4
- Actual
- collector 1.8.4
- Docker
- 29.0.2
- CPU
- 12%
- RAM
- 43%
- Disk
- 31%
- Temp
- 48 °C
- Uptime
- 38 d
- Last deploy
- 2 d ago
From a working Compose file to a managed fleet
Docker made packaging easy and Compose made one machine easy. The problem starts at the twelfth device. That is the whole product.
- 1
Install the agent
One command on any Debian-style Linux with Docker. The agent prints a pairing code and connects outbound. Nothing listens.
- 2
Cut a release
Paste the docker-compose.yml you already run. Images are resolved to digests and checked for ARM64 and x86_64 before anything ships.
- 3
Deploy with a gate
Test fleet first, then 10 percent, then everyone. Each wave waits for health. A failure pauses the rollout or rolls it back.
Built for the fleet that is too small for Balena and too real for scripts
Compose-first
Your deployment artifact is docker-compose.yml. No proprietary manifest, no Helm, no operator.
Desired state
The control plane stores the intended release; the agent pulls and reconciles. Offline devices converge when they return.
Edge-aware
Temperature, throttling, disk, architecture, Docker version, clock health. SBCs fail differently from VMs; we watch for that.
Safe releases
Digest pinning, architecture preflight, canary waves, health gates, automatic halt, one-click rollback.
Outbound-only
Per-device credentials over one TLS connection. No SSH keys on the fleet, no inbound ports, no VPN.
Small-fleet economics
Five devices free. 25 for $10. 100 for $25. Priced for the company with one box at each customer.
A broken release at 50 remote sites is a truck roll. We are conservative on purpose.
Every deployment runs through validation and waves. Health means the application works, not just that the container started.
- Architecture validation against every target device before the first wave.
- Compose validation and registry access check at release time.
- Waves with configurable percentages, max parallel devices, and minimum healthy time.
- Container healthchecks plus HTTP and TCP probes evaluated on the device.
- Failure threshold pauses the rollout or rolls back affected devices.
- Offline devices receive the release when they return; deadlines keep rollouts honest.
Release collector 1.8.4
├─ architecture validation ✓ linux/arm64, linux/amd64
├─ compose validation ✓ 3 services
└─ registry access check ✓ ghcr.io/acme
test fleet (2 devices) ─── health gate ✓ 2/2 healthy, 120 s
10% production (4) ─── health gate ✓ 4/4
25% production (9) ─── health gate ✗ 1 failed (threshold 10%)
rollout paused · 1 device rolled back
[Resume] [Roll back all] [Inspect logs]Where Simple Docker Ops sits
| SSH + scripts | Balena / Qbee / Mender | Portainer | Simple Docker Ops | |
|---|---|---|---|---|
| Deployment artifact | Whatever you wrote | Platform-specific or OTA image | Stacks in a server UI | Your docker-compose.yml |
| Offline devices | Script fails | Handled | Host must be reachable | Desired state, reconciled on reconnect |
| Staged rollout + rollback | Manual | Yes | Limited | Waves, health gates, one-click rollback |
| Host OS | Yours | Often proprietary | Yours | Yours |
| Price at 30 devices | Your evenings | $34 to $159+ /mo | ~$105 /mo commercial | $25 /mo |
Transparent tiers for 5 to 500 devices
Managed registry storage included. No per-seat pricing, no sales call to see the numbers.
Free
5 devices · 5 GB registry
Homelab, evaluation, tiny prototypes.
Developer
25 devices · 25 GB registry
Independent developer or a tiny commercial fleet.
Team
100 devices · 100 GB registry
Small product company or integrator.
Fleet
500 devices · 500 GB registry
Growing commercial fleet or MSP.
Where a managed fleet beats a folder of scripts
Deploy one Compose file to every Raspberry Pi you own
Developers and makers with a handful of Pis at home or at customer sites.
Fleet management for Raspberry Pis, without Kubernetes
Teams that looked at k3s and decided their workload did not justify it.
Update containers on remote devices without opening SSH
Small product companies with one Linux box at each customer location.
A Balena alternative for fleets of 5 to 100 devices
Teams that outgrew the free tier but not the ten-device problem.
A Portainer alternative built for physical fleets
Integrators and MSPs running the same stack at many sites.
Canary deployments for Compose workloads on real devices
Anyone who has broken 50 remote devices with one push.
ARM64 and x86_64 in one fleet, without exec format errors
Mixed fleets of Raspberry Pis, NUCs, and industrial gateways.
Deploy behind NAT and firewalls without inbound access
Devices on customer networks, cellular routers, and locked-down sites.
Common questions
Do I need to install a custom OS?
No. Keep Debian, Ubuntu, Raspberry Pi OS, or Armbian and your existing Docker Engine. One command installs a small agent that connects outbound to the control plane. Nothing listens on the device.
Is this Kubernetes?
No, and it never will be. Your deployment artifact is the docker-compose.yml you already have. We add releases, fleets, staged rollouts, health gates, and rollback around it.
What happens when a device is offline during a rollout?
The desired release waits for it. When the device reconnects it reconciles, reports health, and the rollout accounts for it. Nothing is half-applied: the agent treats each release as a transaction and reconciles on startup after power loss.
How do you handle ARM and x86 in one fleet?
Every release resolves its images to OCI digests and records which platforms each image provides. A release that lacks linux/arm64 cannot be deployed to an ARM64 device; you find out before the rollout, not from an exec format error on site.
Where do secrets live?
Encrypted at rest in the control plane, scoped to an organisation, fleet, device, or application, masked in the UI, and delivered to the agent over the authenticated channel only when a release needs them.
Can the agent open a shell on my device?
Not in the current release. Commands are limited to restart, logs, diagnostics, and prune. A short-lived, audited terminal is on the roadmap and will require explicit authorisation each time.
What does it cost for 30 devices?
The Team plan at $25 per month covers 100 devices and 100 GB of managed registry. Balena starts at $159 for 30 devices; Portainer commercial starts around $105. We are built for the fleet that is too small for those.
Add your first device free.
Five devices and five gigabytes of registry on the Free plan. No card, no sales call, no Kubernetes.
curl -fsSL https://simpledockerops.com/install | sudo sh