用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/microwind/ai-skills --skill docker-compose命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | Docker Compose编排 |
| description | 当编排容器时,分析服务依赖,优化配置管理,解决网络问题。验证容器架构,设计部署策略,和最佳实践。 |
| license | MIT |
Docker Compose是定义和运行多容器Docker应用程序的工具,通过YAML文件配置服务、网络和卷,实现容器化应用的快速部署和管理。不当的Compose配置会导致服务启动失败、资源浪费、网络通信问题。
核心原则: 好的Compose配置应该服务独立、依赖明确、资源合理、网络清晰。坏的配置会导致服务耦合、启动顺序混乱、资源冲突。
始终:
触发短语:
❌ 服务启动失败
❌ 网络通信问题
❌ 数据持久化问题
❌ 资源管理问题
# docker-compose.yml
version: '3.8'
services:
# Web应用服务
web:
build:
context: ./web
dockerfile: Dockerfile
args:
NODE_ENV: production
image: myapp/web:latest
container_name: myapp-web
restart: unless-stopped
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- API_URL=http://api:8000
- REDIS_URL=redis://redis:6379
volumes:
- ./web/logs:/app/logs
- web_uploads:/app/uploads
depends_on:
api:
condition: service_healthy
redis:
condition: service_started
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries:
[, , , ]
[, ]
[, , , , ]
[, , , ]
# docker-compose.dev.yml
version: '3.8'
services:
web:
build:
context: ./web
dockerfile: Dockerfile.dev
image: myapp/web:dev
container_name: myapp-web-dev
ports:
- "3000:3000"
- "9229:9229" # Node.js调试端口
environment:
- NODE_ENV=development
- API_URL=http://localhost:8000
- REDIS_URL=redis://localhost:6379
volumes:
- ./web:/app
- /app/node_modules # 防止node_modules被覆盖
- web_dev_logs:/app/logs
command: npm run dev
depends_on:
- api
- redis
networks:
- dev-network
api:
build:
context: ./api
dockerfile: Dockerfile.dev
image:
[, ]
# docker-compose.prod.yml
version: '3.8'
services:
web:
image: myapp/web:${VERSION}
container_name: myapp-web-prod
restart: always
environment:
- NODE_ENV=production
- API_URL=https://api.myapp.com
- REDIS_URL=redis://redis:6379
deploy:
replicas: 3
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
window: 120s
update_config:
parallelism: 1
delay: 10s
failure_action: rollback
monitor: 60s
max_failure_ratio: 0.3
healthcheck:
[, , , ]
[, , , ]
[, ]
[, , , , ]
[, , , ]
#!/bin/bash
# deploy.sh - Docker Compose自动化部署脚本
set -e
# 配置变量
PROJECT_NAME="myapp"
ENVIRONMENT=${1:-development}
VERSION=${2:-latest}
COMPOSE_FILE="docker-compose.yml"
ENV_FILE=".env.${ENVIRONMENT}"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查依赖
check_dependencies() {
log_info "检查依赖..."
if ! command -v docker &> /dev/null; then
log_error "Docker未安装"
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
log_error "Docker Compose未安装"
exit 1
! docker info &> /dev/null;
log_error
1
log_info
}
() {
log_info
[ -f ];
$( | grep -v | xargs)
log_info
log_warn
VERSION=
ENVIRONMENT=
}
() {
log_info
)
docker-compose -f docker-compose.dev.yml build
;;
)
docker-compose -f docker-compose.prod.yml build
;;
*)
docker-compose build
;;
log_info
}
() {
log_info
)
docker-compose -f docker-compose.dev.yml up -d
;;
)
docker-compose -f docker-compose.prod.yml up -d
;;
*)
docker-compose up -d
;;
log_info
}
() {
log_info
max_attempts=30
attempt=1
[ -le ];
log_info
docker-compose ps | grep -q ;
log_info
0
10
((attempt++))
log_error
docker-compose ps
1
}
() {
log_info
)
docker-compose -f docker-compose.dev.yml -T api python manage.py migrate
;;
)
docker-compose -f docker-compose.prod.yml -T api python manage.py migrate
;;
*)
docker-compose -T api python manage.py migrate
;;
log_info
}
() {
log_info
backup_dir=
timestamp=$( +%Y%m%d_%H%M%S)
backup_file=
-p
)
docker-compose -f docker-compose.dev.yml -T postgres pg_dump -U dev myapp_dev >
;;
)
docker-compose -f docker-compose.prod.yml -T postgres pg_dump -U prod_user myapp_prod >
;;
*)
docker-compose -T postgres pg_dump -U user myapp >
;;
log_info
}
() {
log_info
docker image prune -f
images_to_keep=3
docker images --format | \
grep | \
-n +$((images_to_keep + )) | \
awk | \
xargs -r docker rmi
log_info
}
() {
log_info
docker-compose ps
log_info
docker-compose logs --=50
}
() {
target_version=
[ -z ];
log_error
1
log_warn
docker-compose down
VERSION=
build_images
start_services
health_check
log_info
}
() {
=
)
check_dependencies
load_environment
build_images
start_services
health_check
run_migrations
show_status
;;
)
check_dependencies
load_environment
build_images
docker-compose up -d
health_check
;;
)
log_info
docker-compose down
;;
)
log_info
docker-compose restart
health_check
;;
)
docker-compose logs -f
;;
)
show_status
;;
)
backup_database
;;
)
cleanup_images
;;
)
rollback
;;
)
health_check
;;
*)
1
;;
}
main
# docker-compose.monitoring.yml
version: '3.8'
services:
# Prometheus监控
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
ports:
- "9090:9090"
volumes:
- ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--storage.tsdb.retention.time=200h'
- '--web.enable-lifecycle'
networks:
- monitoring
# Grafana可视化
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
ports:
- "3001:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}