install
source · Clone the upstream repo
git clone https://github.com/chaterm/terminal-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/chaterm/terminal-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/docker/compose" ~/.claude/skills/chaterm-terminal-skills-compose && rm -rf "$T"
manifest:
docker/compose/SKILL.mdsource content
Docker Compose 编排
概述
多容器编排、环境变量、网络配置等技能。
基础命令
# 启动服务 docker compose up docker compose up -d # 后台运行 docker compose up --build # 重新构建 # 停止服务 docker compose down docker compose down -v # 同时删除卷 docker compose down --rmi all # 同时删除镜像 # 查看状态 docker compose ps docker compose ps -a # 查看日志 docker compose logs docker compose logs -f # 实时跟踪 docker compose logs service_name # 执行命令 docker compose exec service_name sh docker compose run service_name command # 重启服务 docker compose restart docker compose restart service_name # 扩缩容 docker compose up -d --scale web=3
配置文件
基础结构
# docker-compose.yml version: "3.9" services: web: image: nginx:alpine ports: - "80:80" volumes: - ./html:/usr/share/nginx/html depends_on: - api api: build: ./api environment: - DATABASE_URL=postgres://db:5432/mydb depends_on: - db db: image: postgres:15 volumes: - db_data:/var/lib/postgresql/data environment: POSTGRES_PASSWORD: secret volumes: db_data: networks: default: driver: bridge
服务配置详解
build
services: app: # 简单形式 build: ./app # 完整形式 build: context: ./app dockerfile: Dockerfile.prod args: - VERSION=1.0 target: production cache_from: - myapp:cache
ports
services: web: ports: - "80:80" # HOST:CONTAINER - "443:443" - "8080-8090:8080-8090" # 端口范围 - "127.0.0.1:3000:3000" # 绑定特定 IP
volumes
services: app: volumes: # 命名卷 - data:/var/lib/data # 绑定挂载 - ./config:/etc/app/config:ro # 匿名卷 - /var/lib/data volumes: data: driver: local
environment
services: app: environment: - NODE_ENV=production - DATABASE_URL=postgres://localhost/db # 或使用映射形式 environment: NODE_ENV: production DATABASE_URL: postgres://localhost/db # 从文件加载 env_file: - .env - .env.local
depends_on
services: web: depends_on: - db - redis # 带条件 depends_on: db: condition: service_healthy redis: condition: service_started
healthcheck
services: web: healthcheck: test: ["CMD", "curl", "-f", "http://localhost/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s
deploy(Swarm 模式)
services: web: deploy: replicas: 3 resources: limits: cpus: '0.5' memory: 512M reservations: cpus: '0.25' memory: 256M restart_policy: condition: on-failure delay: 5s max_attempts: 3
网络配置
自定义网络
services: frontend: networks: - frontend backend: networks: - frontend - backend db: networks: - backend networks: frontend: driver: bridge backend: driver: bridge internal: true # 内部网络,无外部访问
网络别名
services: db: networks: backend: aliases: - database - postgres
环境变量
.env 文件
# .env POSTGRES_VERSION=15 POSTGRES_PASSWORD=secret APP_PORT=3000
# docker-compose.yml services: db: image: postgres:${POSTGRES_VERSION} environment: POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} app: ports: - "${APP_PORT}:3000"
多环境配置
# docker-compose.override.yml(开发环境,自动加载) # docker-compose.prod.yml(生产环境) # 使用多个配置文件 docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
# docker-compose.yml(基础配置) services: app: image: myapp:latest # docker-compose.override.yml(开发覆盖) services: app: build: . volumes: - .:/app environment: - DEBUG=true # docker-compose.prod.yml(生产覆盖) services: app: restart: always environment: - DEBUG=false
常见场景
场景 1:Web 应用栈
version: "3.9" services: nginx: image: nginx:alpine ports: - "80:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro depends_on: - app app: build: . environment: - DATABASE_URL=postgres://postgres:secret@db:5432/mydb - REDIS_URL=redis://redis:6379 depends_on: db: condition: service_healthy redis: condition: service_started db: image: postgres:15-alpine volumes: - postgres_data:/var/lib/postgresql/data environment: POSTGRES_PASSWORD: secret POSTGRES_DB: mydb healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 5s timeout: 5s retries: 5 redis: image: redis:7-alpine volumes: - redis_data:/data volumes: postgres_data: redis_data:
场景 2:开发环境热重载
version: "3.9" services: app: build: context: . target: development volumes: - .:/app - /app/node_modules # 排除 node_modules environment: - NODE_ENV=development command: npm run dev ports: - "3000:3000"
场景 3:数据库初始化
services: db: image: postgres:15 volumes: - postgres_data:/var/lib/postgresql/data - ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro environment: POSTGRES_PASSWORD: secret
场景 4:日志配置
services: app: logging: driver: json-file options: max-size: "10m" max-file: "3"
故障排查
# 查看配置 docker compose config # 查看服务日志 docker compose logs service_name --tail=100 # 进入容器 docker compose exec service_name sh # 查看网络 docker network ls docker network inspect project_default # 重建服务 docker compose up -d --force-recreate service_name
| 问题 | 排查方法 |
|---|---|
| 服务无法启动 | , 检查依赖 |
| 网络不通 | 检查网络配置、服务名 |
| 卷挂载问题 | 检查路径、权限 |
| 环境变量未生效 | 验证 |