返回首页

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 级别的笔记,随着使用经验的积累会不断更新。