docker-compose-skill

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese
<objective> Set up and manage local multi-service development environments using Docker Compose. Provides compose.yml templates, health checks, hot reload, and essential commands for PostgreSQL, Redis, MongoDB, and other services. </objective>
<quick_start>
  1. Copy the compose.yml template below for your stack (Postgres, Redis, etc.)
  2. Create a
    .env
    file with database credentials
  3. Run
    docker compose up -d
    to start services
  4. Use
    docker compose logs -f
    to monitor </quick_start>
<success_criteria>
  • All services start with
    docker compose up -d
    and reach healthy state
  • Health checks configured for every database/cache service
  • Environment variables externalized to
    .env
    (no hardcoded secrets in compose.yml)
  • Hot reload working for application code via volume mounts
  • docker compose down -v
    cleanly removes all containers and volumes </success_criteria>
<objective> 使用Docker Compose搭建并管理本地多服务开发环境。提供compose.yml模板、健康检查、热重载功能,以及PostgreSQL、Redis、MongoDB等服务的必备命令。 </objective>
<quick_start>
  1. 为你的技术栈(Postgres、Redis等)复制下方的compose.yml模板
  2. 创建包含数据库凭证的.env文件
  3. 运行
    docker compose up -d
    启动服务
  4. 使用
    docker compose logs -f
    监控服务 </quick_start>
<success_criteria>
  • 所有服务通过
    docker compose up -d
    启动并进入健康状态
  • 为每个数据库/缓存服务配置健康检查
  • 环境变量外置到.env文件(compose.yml中无硬编码密钥)
  • 通过卷挂载实现应用代码热重载
  • docker compose down -v
    可彻底移除所有容器和卷 </success_criteria>

Docker Compose Skill

Docker Compose Skill

Local development environments using Docker Compose for multi-service setups.
使用Docker Compose搭建本地多服务开发环境。

Quick Start

快速开始

Common Services

常用服务

ServiceImageDefault Port
PostgreSQL
postgres:16-alpine
5432
Redis
redis:7-alpine
6379
MongoDB
mongo:7
27017
MySQL
mysql:8
3306
服务镜像默认端口
PostgreSQL
postgres:16-alpine
5432
Redis
redis:7-alpine
6379
MongoDB
mongo:7
27017
MySQL
mysql:8
3306

Basic compose.yml

基础compose.yml

yaml
services:
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: ${DB_USER:-app}
      POSTGRES_PASSWORD: ${DB_PASSWORD:-secret}
      POSTGRES_DB: ${DB_NAME:-app_dev}
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-app}"]
      interval: 5s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data

volumes:
  postgres_data:
  redis_data:
yaml
services:
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: ${DB_USER:-app}
      POSTGRES_PASSWORD: ${DB_PASSWORD:-secret}
      POSTGRES_DB: ${DB_NAME:-app_dev}
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-app}"]
      interval: 5s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data

volumes:
  postgres_data:
  redis_data:

Essential Commands

必备命令

bash
undefined
bash
undefined

Start services (detached)

启动服务(后台模式)

docker compose up -d
docker compose up -d

Start with logs visible

启动服务并查看日志

docker compose up
docker compose up

View logs

查看日志

docker compose logs -f [service]
docker compose logs -f [service]

Shell into container

进入容器终端

docker compose exec db psql -U app
docker compose exec db psql -U app

Stop and remove containers

停止并移除容器

docker compose down
docker compose down

Stop and remove volumes (full reset)

停止并移除容器和卷(完全重置)

docker compose down -v
docker compose down -v

Rebuild without cache

无缓存重建镜像

docker compose build --no-cache
undefined
docker compose build --no-cache
undefined

Environment Variables

环境变量

Create
.env
file in project root:
bash
undefined
在项目根目录创建.env文件:
bash
undefined

.env

.env

DB_USER=app DB_PASSWORD=secret DB_NAME=myapp_dev REDIS_URL=redis://localhost:6379

Reference in compose.yml:
```yaml
environment:
  POSTGRES_USER: ${DB_USER:-app}
DB_USER=app DB_PASSWORD=secret DB_NAME=myapp_dev REDIS_URL=redis://localhost:6379

在compose.yml中引用:
```yaml
environment:
  POSTGRES_USER: ${DB_USER:-app}

Health Checks

健康检查

Always add health checks for service dependencies:
yaml
services:
  db:
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-app}"]
      interval: 5s
      timeout: 5s
      retries: 5

  app:
    depends_on:
      db:
        condition: service_healthy
务必为服务依赖项添加健康检查:
yaml
services:
  db:
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-app}"]
      interval: 5s
      timeout: 5s
      retries: 5

  app:
    depends_on:
      db:
        condition: service_healthy

Hot Reload Setup

热重载配置

Mount source code for development:
yaml
services:
  app:
    build: .
    volumes:
      - .:/app                    # Source code
      - /app/node_modules         # Preserve node_modules
    environment:
      - NODE_ENV=development
挂载源代码用于开发:
yaml
services:
  app:
    build: .
    volumes:
      - .:/app                    # 源代码目录
      - /app/node_modules         # 保留node_modules
    environment:
      - NODE_ENV=development

Profiles for Optional Services

可选服务的Profiles配置

yaml
services:
  mailhog:
    image: mailhog/mailhog
    profiles: ["mail"]
    ports:
      - "8025:8025"
yaml
services:
  mailhog:
    image: mailhog/mailhog
    profiles: ["mail"]
    ports:
      - "8025:8025"

Start with: docker compose --profile mail up

启动命令:docker compose --profile mail up

undefined
undefined

Reference Files

参考文件

  • reference/compose-patterns.md
    - Common compose file patterns
  • reference/services.md
    - Database, cache, queue service configs
  • reference/networking.md
    - Ports, networks, volumes
  • reference/dev-workflow.md
    - Development workflow commands
  • reference/compose-patterns.md
    - 常用compose文件模式
  • reference/services.md
    - 数据库、缓存、队列服务配置
  • reference/networking.md
    - 端口、网络、卷配置
  • reference/dev-workflow.md
    - 开发工作流命令