This free tool lets you build a multi-container Docker architecture visually — add services with their image, ports, volumes, and environment variables, wire up depends_on relationships between them, and export a real, working docker-compose.yml file. Two starter templates (a typical web app + database + cache stack, and a microservices architecture behind a gateway) give you a working example to start from.
Fill in the service form on the right: a name (becomes the docker-compose service key), a Docker image (e.g. node:20-alpine, postgres:16-alpine), port mappings in host:container format, volume mounts, environment variables, and which other services this one depends on. Click "Add Service" and it appears on the architecture diagram, with dependency arrows automatically drawn to any services you selected.
The depends_on field controls container startup order: Docker Compose will start a service's dependencies before starting the service itself. This does not wait for the dependency to be fully ready (a database container can report "started" before PostgreSQL has finished initializing) — for production use, pair depends_on with a proper health check and a wait-for-it style startup script or Docker's built-in condition: service_healthy dependency condition.
The "Web + Postgres + Redis" template shows the most common small-application pattern: a web service depending on both a database and a cache. The "Microservices + Gateway" template shows a slightly larger pattern: an nginx gateway routing to two independent backend services, one of which depends on a shared database — illustrating how depends_on chains can span more than two levels.
Click "Export docker-compose.yml" to generate a real, valid Docker Compose file reflecting your diagram, including a top-level volumes: section for any named (non-path) volumes referenced by your services. Copy the output into a file named docker-compose.yml in your project root, and run docker compose up to start the whole stack.
No — this is a visual planning and docker-compose.yml generation tool, not a Docker runtime. It runs entirely in your browser and produces a real, valid compose file you can then run with an actual Docker installation on your own machine or server.
A bind mount (e.g. ./src:/app/src) maps a specific path on your host machine into the container — useful for live-reloading source code during development. A named volume (e.g. pgdata:/var/lib/postgresql/data) is managed by Docker itself rather than tied to a host path — the standard choice for database data you want to persist across container restarts without worrying about the exact host filesystem location. This tool automatically detects named volumes (any volume source that isn't a relative or absolute path) and adds the required top-level volumes: section to the exported YAML.
Not directly in this version — delete the service (✕ button on its box) and re-add it with the corrected values. The form-based workflow is intentionally kept simple for quickly sketching out an architecture rather than fine-tuning an existing one.
Modern Docker Compose (the docker compose CLI plugin, v2 and later) no longer requires or recommends a top-level version: field — it was deprecated as compose file schema versioning moved to being inferred automatically. If you're using an older standalone docker-compose (v1) binary, you may need to add version: "3.8" manually at the top of the exported file.