Docker on a box, run from one place. Every part of it.

The runtime from docker.com with compose, enabled at boot, its daemon seeded so no box fills a disk with logs, and the firewall fix nobody remembers until it bites. Then everything Docker does as a screen: stacks, containers, logs, images, volumes, networks, disk. This page is all of it.

A stack being brought up in Vigia: the job card with each compose step in its own words
A stack coming up, one job, each step in its own words.

The runtime, put there properly

Docker from docker.com — the distribution's docker.io lags a year and ships no compose plugin — with compose and buildx, enabled at boot. Before the first start Vigia seeds daemon.json with log rotation and live-restore, so a box set up here never fills a disk with container logs and never drops its containers when the daemon restarts. The service and the docker group (offered, not assumed: it is root in all but name), the daemon's keys that decide whether the box is still standing in six months, and the registries the box is logged in to — the login itself typed in the terminal, so the token never passes through Vigia — are read and set on one screen.

/ THE FIREWALL FIX

The firewall fix nobody remembers

Docker publishes ports past ufw unless it is told not to: a container on port 3306 with a "closed" firewall is open to the internet, and most people find out the hard way. Vigia writes the ufw-docker block into after.rules once, a dated copy kept, and from then on a published port is closed to the internet until a ufw route rule opens it — added and removed here, port by port, "to whom" asked first. The LAN and the box itself still reach everything, and the confirmation says beforehand which ports are reachable from the world right now and will go dark.

Beside it, a box once the block is written: what the internet reaches, what the LAN and the box still reach, and what the daemon was seeded with before its first start.

A stack in three answers

Ready compose files for a small developer: pick the app, answer the three things that matter, running. Every choice is a ${VAR} written into a mode-600 .env, so no password ever sits in the YAML; databases are bound to 127.0.0.1, admin passwords are generated, logs are rotated, and the note on the card says which ports face the world. A stack already on the box is a compose project like any other: pull-and-up, the update check, the effective config read back, the editor for the file itself.

Containers, watched

Running first, then the trouble. A row opens to its details, its stats — Monitor's charts for one process tree, every number a rate between two samples — and its top. Its logs read in place, with the lines in hand for Themis when something in them needs explaining, or followed live in a terminal tab with docker logs -f typed in. A shell into a container is a real terminal tab with docker exec typed in. The run form carries the long tail of docker run, one control a row; any container reads back into it, and Recreate steps the old one aside under a temporary name until the new one is up.

/ VOLUMES

Volumes: the part that is actually your data

A container is disposable; its volume is not. Every volume on the box is listed with what uses it and what it weighs, and a volume opens to the verbs that matter: back it up — to this computer, or as a file on the server; restore it from either; and browse its folder in Files, read as root, without starting a container to look. While the bytes move, the containers on it are paused unless you say otherwise — frozen, memory kept — so a database is not copied halfway through a write. Images and networks sit beside them: pull, build and prune; new, attach, and what each network reaches.

Beside it, one volume backed up while the database on it sits frozen.

# srv-01 · Containers · Volumes volume used by size db-data shop-db 2.4 GB uploads shop-app 860 MB cache — 120 MB # db-data · back it up, to this computer pause shop-db frozen, memory kept copy db-data 2.4 GB unpause shop-db running ✓ backed up to this computer # or as a file on the server · restore from either # browse its folder in Files, read as root, no container started

Disk, and what can be given back

A full disk is how most Docker boxes die: dangling images, stopped containers, build cache, logs nobody rotated. Vigia shows what takes the room by kind and offers the cleanups one at a time, each saying afterwards what the disk looks like now — and a prune schedule the box runs on its own, so the same box does not fill up again in a month.

The runtime is one card on the hub

Install it, and the Containers tool appears in the rail the moment the daemon runs. Nothing on the hub is a promise.

Web, mail, containers, VPN and more