Introduction
Docker Compose lets you define and run multi-container applications with a single YAML file. Instead of running multiple docker run commands, you describe your entire stack in docker-compose.yml.
Installation
Docker Compose V2 is included with Docker Engine:
docker compose versionExample: WordPress Stack
# docker-compose.yml
services:
wordpress:
image: wordpress:latest
restart: always
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: secretpass
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
depends_on:
- db
db:
image: mariadb:11
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: secretpass
volumes:
- db_data:/var/lib/mysql
redis:
image: redis:7-alpine
restart: always
volumes:
wp_data:
db_data:Essential Commands
# Start all services in background
docker compose up -d
# View running services
docker compose ps
# View logs
docker compose logs -f wordpress
# Stop all services
docker compose down
# Stop and remove volumes (data loss!)
docker compose down -vBest Practices
- Always use named volumes for persistent data
- Pin image versions in production (not
:latest) - Use
.envfiles for environment variables - Set
restart: alwaysfor production services