Docker Compose 速查
什么是 Docker Compose
Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过一个 docker-compose.yml 文件,你可以配置应用的服务、网络和卷,然后用一条命令创建并启动所有服务。
基本命令
# 启动所有服务(后台运行)
docker compose up -d
# 查看运行中的服务
docker compose ps
# 查看日志
docker compose logs -f [service_name]
# 停止所有服务
docker compose down
# 重建镜像并启动
docker compose up -d --build
配置文件示例
version: "3.8"
services:
web:
build: .
ports:
- "8080:80"
environment:
- NODE_ENV=production
- DATABASE_URL=postgres://db:5432/app
depends_on:
- db
- redis
volumes:
- ./data:/app/data
restart: unless-stopped
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: app
POSTGRES_PASSWORD: secret
volumes:
- pgdata:/var/lib/postgresql/data
restart: unless-stopped
redis:
image: redis:7-alpine
restart: unless-stopped
volumes:
pgdata:
networks:
default:
driver: bridge
网络配置
| 驱动 | 用途 | 示例 |
|---|---|---|
| bridge | 默认,容器间通信 | driver: bridge |
| host | 共享宿主机网络 | driver: host |
| overlay | 跨主机通信(Swarm) | driver: overlay |
常用技巧
环境变量管理
# 使用 .env 文件
DB_PASSWORD=mysecret
APP_PORT=3000
services:
app:
env_file:
- .env
健康检查
services:
web:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
资源限制
services:
web:
deploy:
resources:
limits:
cpus: "0.50"
memory: 512M
reservations:
cpus: "0.25"
memory: 256M
与 Dockerfile 的关系
Dockerfile 定义单个容器的构建过程,Compose 定义多个容器的编排关系。
一个典型的项目结构:
my-project/
├── docker-compose.yml
├── Dockerfile
├── src/
│ └── ...
└── .env
常见问题
Q: `docker compose` 和 `docker-compose` 有什么区别?
A: V1 使用 docker-compose(Python 实现),V2 使用 docker compose(Go 实现,作为 Docker CLI 插件)。V2 性能更好,功能更全。
Q: 如何查看容器的环境变量?
docker compose exec web env
Q: 如何只重启某个服务?
docker compose restart web
这是一篇 seedling 级别的笔记,随着使用经验的积累会不断更新。