compose
@chaterm · 收录于 1 周前
Docker Compose 编排
适合你,如果经常用 Docker 管理多个服务容器
/ 下载安装
用别的 agent?下载 .zip 解压,把文件夹放进它的技能目录
Claude Code
~/.claude/skills/(项目级 .claude/skills/)Codex CLI
~/.codex/skills/Cursor自动读取上面两处目录
其他工具见其文档的「skills」目录;两个下载是同一份文件,只是名字不同
/ 通过 npx 安装 校验哈希
npx oh-my-skill add chaterm/terminal-skills/compose/ 通过 bash 安装
curl -fsSL https://oh-my-skill.com/install.sh | bash -s -- chaterm/terminal-skills/compose/ 已经装过?验证本机副本,不用重装
npx oh-my-skill verify chaterm/terminal-skills/compose安装目标可用 --agent / --scope 或 --to 明确指定;省略时只会在唯一已存在的 agent 目录上自动选择,零命中或多命中会停止并提示。content_hash 缺失或不一致均拒装。
48GitHub stars
~1.4K上下文体积 · 单文件
镜像托管
怎么用
技能原文 SKILL.md
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
| 问题 | 排查方法 | |------|----------| | 服务无法启动 | docker compose logs, 检查依赖 | | 网络不通 | 检查网络配置、服务名 | | 卷挂载问题 | 检查路径、权限 | | 环境变量未生效 | docker compose config 验证 |
按 Apache-2.0 许可原样转载,未经改动 · 在 GitHub 查看 →
评论
登录即可评论;带「已验证安装」的,是发布者名下有本店的安装或持有记录。
…