关于 docker-production
面向 Docker 生产部署的指导技能,涵盖单机部署、Swarm 集群、滚动更新、Kubernetes 迁移及监控配置,并说明安全与运维注意事项。
主要功能
- 01指导单机 Compose 部署
- 02介绍 Swarm 集群与 Stack
- 03说明滚动更新和回滚
- 04提供 Compose 到 Kubernetes 的迁移指引
- 05介绍 Prometheus、cAdvisor 和 Grafana 监控
适用场景
- 01部署 Docker Compose 生产服务
- 02管理 Swarm 集群与应用更新
- 03将 Compose 配置迁移到 Kubernetes
- 04为容器服务搭建监控
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ full-stack-skills/ docker-skills --skill docker-production安装后在 Claude Code 中输入/docker-production确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlexamples/01-swarm-stack.mdreferences/01-swarm-commands.md02-k8s-migration.md03-monitoring-setup.md详细介绍
Docker 生产环境 — 生产环境部署
关于在生产环境中部署和管理 Docker 的指南。
适用场景
用户提到以下内容时,务必使用此技能:
- “生产部署”、“production Docker”
- “docker swarm”、“docker stack”、“swarm cluster”
- “Kubernetes migration”、“kompose”、“K8s”
- “零停机部署”、“rolling update”
- “容器监控”、“监控”、“Prometheus”
Docker Swarm 快速入门
# Initialize cluster
docker swarm init --advertise-addr <MANAGER-IP>
# Join workers (run on worker nodes)
docker swarm join --token <TOKEN> <MANAGER-IP>:2377
# Deploy a stack
docker stack deploy -c docker-compose.yml myapp
# Manage services
docker service ls
docker service scale myapp_web=5
docker service update --image myapp:v2 myapp_web
docker service logs -f myapp_web
Swarm Compose 示例
version: '3.8'
services:
web:
image: myapp:${TAG:-latest}
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
order: start-first
rollback_config:
parallelism: 1
delay: 10s
resources:
limits:
cpus: '0.5'
memory: 512M
ports:
- "80:8080"
零停机部署
Rolling Update Flow:
┌──────┐ ┌──────┐ ┌──────┐ Old replicas (v1)
│ v1 │ │ v1 │ │ v1 │
└──────┘ └──────┘ └──────┘
docker service update --image myapp:v2 web
Step 1: Start v2
┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
│ v1 │ │ v1 │ │ v1 │ │ v2 │ ← 1 new
└──────┘ └──────┘ └──────┘ └──────┘
Step 2: Replace one v1 with v2
┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
│ v1 │ │ v1 │ │ v2 │ │ v2 │ ← 2 new
└──────┘ └──────┘ └──────┘ └──────┘
... until all v2
Kubernetes 迁移
# Convert compose to K8s
kompose convert -f docker-compose.yml
# Output:
# web-deployment.yaml
# web-service.yaml
# ...
# Apply
kubectl apply -f .
| Compose | K8s |
|---|---|
| services | Deployments + Services |
| networks | Network Policies |
| volumes | PersistentVolumeClaims |
| deploy.replicas | Deployment.spec.replicas |
| secrets | Secrets |
监控技术栈
cAdvisor + Prometheus + Grafana
# docker-compose.monitoring.yml
services:
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
ports: ["8080:8080"]
volumes:
- /:/rootfs:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- /sys:/sys:ro
prometheus:
image: prom/prometheus:latest
ports: ["9090:9090"]
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana:latest
ports: ["3000:3000"]
工作流 — 推荐部署流程
步骤 1:单机部署:compose.yml + restart: unless-stopped + systemd 守护
步骤 2:Swarm 集群:docker swarm init → docker stack deploy -c compose.yml myapp
步骤 3:滚动更新:docker service update --image myapp:v2 + 健康检查 + 回滚
步骤 4:接入监控:Prometheus + cAdvisor + Grafana 绑定额仪表盘
步骤 5:迁移至 K8s:kompose convert → 手动添加资源限制 + 健康检查 → Helm Chart
注意事项 — 常见陷阱
- Swarm 管理器只有一个:如果唯一的管理器宕机,集群将无法响应。→ 恢复方法:使用 3 个或 5 个管理器;使用
docker node promote <worker>添加管理器;定期备份/var/lib/docker/swarm/。 - 滚动更新健康检查:没有健康检查时,更新可能会部署有问题的容器。→ 恢复方法:在 Dockerfile 中定义 HEALTHCHECK,并配置服务健康检查;使用
--update-failure-action rollback。 - 未使用卷的数据:生产数据库必须使用卷。容器重启后,若未使用卷,将获得新的文件系统。→ 恢复方法:
docker service create --mount type=volume,src=db_data,target=/var/lib/mysql。 - 直接迁移至 K8s:
kompose只是起点,生成的配置并非可直接用于生产环境的 K8s 配置。→ 恢复方法:运行kompose convert后,手动添加资源限制、健康检查、初始化容器,以及 ConfigMap/Secret 引用。
能力边界 — 适用与不适用场景
| 分类 | 场景 | 说明 |
|---|---|---|
| ✅ 能做 | 单机 Compose 生产部署 | compose.yml + systemd 守护 |
| ✅ 能做 | Swarm 集群管理 | init/join/stack deploy/rolling update |
| ✅ 能做 | K8s 迁移方案 | kompose + 手动调整 + Helm Chart |
| ✅ 能做 | 生产监控搭建 | Prometheus + cAdvisor + Grafana + Loki |
| ⚠️ 需条件 | 多数据中心 Swarm | 需要 overlay 网络 + 低延迟连接 |
| ⚠️ 需条件 | 零停机迁移至 K8s | 需要蓝绿/金丝雀发布策略 |
| ❌ 超范围 | 应用代码部署 | 各语言 CI/CD 管道 |
| ❌ 超范围 | K8s 集群搭建 | 请参阅 K8s 官方文档 |
| ❌ 超范围 | 数据库高可用 | DBA 专业领域 + 数据库原生方案 |
不适用场景
| ❌ 跳过 | ✅ 改用 |
|---|---|
| 开发/调试 | docker-run |
| 单容器应用 | docker-run + systemd |
| 从一开始就采用 K8s 原生方案 | 跳过 Swarm,直接使用 K8s |
| Docker 基础知识 | docker-basics |
安全与稳定性
- 定期轮换 Swarm 加入令牌。泄露的 worker 令牌可能导致未经授权的节点加入。
- 在生产环境的所有堆栈中,使用 Docker Secrets 存储所有敏感配置。
- 在生产环境中为 Docker 守护进程启用 TLS(
tlsverify模式)。 - 为所有生产服务设置资源限制,以防止嘈杂邻居问题。
- 定期备份 Swarm Raft 数据:
/var/lib/docker/swarm/。 - 监控节点健康状况,并为节点故障设置告警。
📚 官方文档参考
🧭 Docker 技能之旅
📍 你在这里:
docker-production— 生产部署
← 上一步:docker-cicd | → 下一步:docker-troubleshooting
FAQ
Q1: 如何快速上手此技能? A: 参考上方的快速开始章节,按步骤操作即可。
Q2: 遇到版本不兼容问题怎么办? A: 检查依赖版本,使用 lock 文件锁定,参考常见陷阱章节。
Q3: 如何在生产环境使用? A: 参考最佳实践章节,确保配置正确,做好监控和日志。
Q4: 性能如何优化? A: 参考性能优化相关文档,使用缓存、索引等手段。
Q5: 如何贡献或反馈问题? A: 在 GitHub 仓库提交 Issue 或 Pull Request。
Q6: 是否支持中文? A: 支持中文文档和中文注释,详见国内适配章节。