Defining and running a multi-container application as a single, declarative unit.
A docker-compose.yml file declares services (each corresponding to a container), along with the networks and volumes a whole application stack needs — running docker compose up builds and starts everything together, with the connections between services already wired up. Services on the same Compose network can reach each other simply by service name, resolved through Docker's built-in DNS, with no manual network configuration required.
depends_on controls the order services start in, but not whether a dependency is actually ready to accept connections — a database container being 'started' doesn't mean it's finished initializing, which is a very common source of race-condition bugs in Compose setups; healthchecks are the real fix, letting a service wait until a dependency reports itself genuinely ready rather than just running. Compose is squarely a local development and testing tool — for production orchestration at real scale (multiple hosts, self-healing, rolling deployments), something like Kubernetes takes over.
What you'll walk away knowing