Docker Compose is a tool used to define and manage multi-container
Docker applications using a docker-compose.yml file.
It allows you to:
- Define multiple services
- Configure networking
- Manage volumes
- Set environment variables
- Start and stop everything with a single command
version: "3.9"
services:
service_name:
image: image_name
ports:
- "host_port:container_port"
environment:
- KEY=value
volumes:
- volume_name:/path/in/container
volumes:
volume_name:- Each service = one container
- Defined under
services: - Automatically connected through a default network
- Docker Compose automatically creates a default network
- Services communicate using service names
- No manual linking required
Example:
services:
wordpress:
image: wordpress
environment:
WORDPRESS_DB_HOST: db
db:
image: mysqlHere db acts as the hostname for MySQL.
services:
db:
image: mysql
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:Why important?
-
Data remains after:
docker compose down
-
Without volumes → data is lost when containers are removed
environment:
MYSQL_ROOT_PASSWORD: example.env file:
MYSQL_ROOT_PASSWORD=example
Compose file:
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}Advantages: - Cleaner configuration - Easier environment switching - Production-ready setup
docker compose updocker compose up -ddocker compose stopdocker compose downdocker compose psdocker compose logsdocker compose logs dbdocker compose up --buildOne container running: - Web server - Application - Database
One container per service.
Example: - WordPress container - MySQL container
Advantages:
- Separation of concerns
- Scalability
- Easier debugging
- Independent updates
Requirements:
- Two services
- Same network (automatic)
- MySQL with named volume
- WordPress connects using service name
Persistence Test:
- Run
docker compose down - Run
docker compose up - Data should still exist
Reason: Named volumes preserve database data.
- Start services
docker compose up - Start in background
docker compose up -d - Stop containers only
docker compose stop - Remove containers + networks
docker compose down - Show logs
docker compose logs - Show running containers
docker compose ps
Old command:
docker-composeNew command (Compose V2):
docker composeModern Docker installations use V2.
- Single command application startup
- Automatic service networking
- Named volumes for persistence
- Environment variable support
- Ideal for development and testing
- Simplifies multi-container management
- Compose = Multi-container tool
- Uses
docker-compose.yml - Services auto-networked
- Service names act as internal DNS
- Named volumes = data persistence
.envfile = configuration managementup -d= background modedownremoves containers and networks