Docker Compose
A tool for defining and running a multi-container application from one declarative configuration file.
Docker Compose is a tool for defining and running applications composed of multiple Docker containers, using a single declarative configuration file, typically named docker-compose.yml, that specifies each service, its image or build context, environment variables, networks, volumes, and dependencies on other services.
How it works
A Compose file describes the desired end state of a multi-container application: which services exist, how they are configured, which ports they expose, which networks they attach to, and which volumes they mount. Running a single command starts, stops, or rebuilds the entire set of services together, with Compose handling the order in which dependent services start and the internal networking that lets them reach one another by service name. This replaces manually running a series of individual container commands with one reproducible, version-controllable definition of the whole system.
Why it matters for self-hosted platforms
A platform built from several independently deployable services, for example a control plane, supporting APIs, a reverse proxy, and worker or agent containers, needs some way to bring all of those pieces up together with consistent networking and configuration. Docker Compose provides that without requiring a container orchestration cluster: a single file captures the entire topology, and a single machine can run it. This makes it a natural fit for a single-VM deployment, where the goal is to run a full multi-service stack on one host with a setup a small team can read, review, and modify directly.
Docker Compose vs Kubernetes
Kubernetes is designed to orchestrate containers across a cluster of machines, handling scheduling, scaling, and failover across nodes. Docker Compose has no concept of multiple nodes: it orchestrates containers on a single host. For platforms that intentionally target single-VM deployment, this is a feature rather than a limitation, since it avoids the operational overhead of cluster management while still giving each service its own isolated, declaratively configured container.
Agenhood's implementation
Agenhood's services, the FastAPI control plane, connectors service, agent containers, egress proxy, and self-hosted SearXNG instance, are defined and run through Docker Compose, the primary way the platform is deployed on a single VM. Networking between services, including the isolated internal network agent containers attach to, is defined directly in the Compose configuration.