名称: docker容器化 描述: 当使用Docker容器化应用程序、创建Dockerfile、docker-compose配置或将容器部署到各种平台时,应使用此技能。特别适用于需要为开发、生产或CI/CD流水线进行容器化的Next.js、React、Node.js应用程序。当用户需要Docker配置、多阶段构建、容器编排或部署到Kubernetes、ECS、Cloud Run等平台时使用此技能。
Docker容器化技能
概述
为现代Web应用程序(特别是Next.js和Node.js项目)生成生产就绪的Docker配置。此技能提供Dockerfile、docker-compose设置、容器管理的bash脚本以及针对各种编排平台的全面部署指南。
核心能力
1. Dockerfile生成
为不同环境创建优化的Dockerfile:
生产环境 (assets/Dockerfile.production):
- 多阶段构建,镜像大小减少85%
- Alpine Linux基础镜像(约180MB最终镜像)
- 非root用户执行以提高安全性
- 健康检查和资源限制
开发环境 (assets/Dockerfile.development):
- 支持热重载
- 包含所有开发依赖项
- 用于实时代码更新的卷挂载
Nginx静态 (assets/Dockerfile.nginx):
- 静态导出优化
- 包含Nginx反向代理
- 最小化占用空间
2. Docker Compose配置
使用assets/docker-compose.yml进行多容器编排:
- 开发和生产服务
- 网络和卷管理
- 健康检查和日志记录
- 重启策略
3. 容器管理的Bash脚本
docker-build.sh - 使用全面选项构建镜像:
./docker-build.sh -e prod -t v1.0.0
./docker-build.sh -n my-app --no-cache --platform linux/amd64
docker-run.sh - 使用完整配置运行容器:
./docker-run.sh -i my-app -t v1.0.0 -d
./docker-run.sh -p 8080:3000 --env-file .env.production
docker-push.sh - 推送到注册表(Docker Hub、ECR、GCR、ACR):
./docker-push.sh -n my-app -t v1.0.0 --repo username/my-app
./docker-push.sh -r gcr.io/project --repo my-app --also-tag stable
docker-cleanup.sh - 释放磁盘空间:
./docker-cleanup.sh --all --dry-run # 预览清理
./docker-cleanup.sh --containers --images # 清理特定资源
4. 配置文件
.dockerignore: 排除不必要的文件(node_modules、.git、日志)nginx.conf: 生产就绪的Nginx配置,包含压缩、缓存、安全头
5. 参考文档
- 多阶段构建详解
- 镜像优化技术(50-85%大小减少)
- 安全最佳实践(非root用户、漏洞扫描)
- 性能优化
- 健康检查和日志记录
- 故障排除指南
container-orchestration.md 涵盖部署到:
- Docker Compose(本地开发)
- Kubernetes(企业级规模,支持自动扩缩)
- Amazon ECS(AWS原生编排)
- Google Cloud Run(无服务器容器)
- Azure容器实例
- Digital Ocean应用平台
包含配置示例、命令、自动扩缩设置和监控。
工作流决策树
1. 什么环境?
- 开发 →
Dockerfile.development(热重载,所有依赖项) - 生产 →
Dockerfile.production(最小化、安全、优化) - 静态导出 →
Dockerfile.nginx(最小占用空间)
2. 单容器还是多容器?
- 单容器 → 仅生成Dockerfile
- 多容器 → 生成
docker-compose.yml(应用+数据库,微服务)
3. 哪个注册表?
- Docker Hub →
docker.io/username/image - AWS ECR →
123456789012.dkr.ecr.region.amazonaws.com/image - Google GCR →
gcr.io/project-id/image - Azure ACR →
registry.azurecr.io/image
4. 部署平台?
- Kubernetes → 参见
references/container-orchestration.mdK8s部分 - ECS → 参见ECS任务定义示例
- Cloud Run → 参见部署命令
- Docker Compose → 使用提供的compose文件
5. 需要优化?
- 镜像大小 → 多阶段构建,Alpine基础镜像
- 构建速度 → 层缓存,BuildKit
- 安全性 → 非root用户,漏洞扫描
- 性能 → 资源限制,健康检查
使用示例
示例1:为生产环境容器化Next.js应用
用户:“为生产环境容器化我的Next.js应用”
步骤:
- 将
assets/Dockerfile.production复制到项目根目录作为Dockerfile - 将
assets/.dockerignore复制到项目根目录 - 构建:
./docker-build.sh -e prod -n my-app -t v1.0.0 - 测试:
./docker-run.sh -i my-app -t v1.0.0 -p 3000:3000 -d - 推送:
./docker-push.sh -n my-app -t v1.0.0 --repo username/my-app
示例2:使用Docker Compose进行开发
用户:“为本地开发设置Docker Compose”
步骤:
- 将
assets/Dockerfile.development和assets/docker-compose.yml复制到项目 - 在docker-compose.yml中自定义服务
- 启动:
docker-compose up -d - 日志:
docker-compose logs -f app-dev
示例3:部署到Kubernetes
用户:“将我的容器化应用部署到Kubernetes”
步骤:
- 构建并将镜像推送到注册表
- 查看
references/container-orchestration.mdKubernetes部分 - 创建K8s清单(deployment、service、ingress)
- 应用:
kubectl apply -f deployment.yaml - 验证:
kubectl get pods && kubectl logs -f deployment/app
示例4:部署到AWS ECS
用户:“部署到AWS ECS Fargate”
步骤:
- 构建并推送到ECR
- 查看
references/container-orchestration.mdECS部分 - 创建任务定义JSON
- 注册:
aws ecs register-task-definition --cli-input-json file://task-def.json - 创建服务:
aws ecs create-service --cluster my-cluster --service-name app --desired-count 3
最佳实践
安全性
✅ 生产环境使用多阶段构建
✅ 以非root用户运行
✅ 使用特定镜像标签(非latest)
✅ 扫描漏洞
✅ 永不硬编码密钥
✅ 实现健康检查
性能
✅ 优化层缓存顺序 ✅ 使用Alpine镜像(约小85%) ✅ 启用BuildKit进行并行构建 ✅ 设置资源限制 ✅ 使用压缩
可维护性
✅ 为复杂步骤添加注释 ✅ 使用构建参数提高灵活性 ✅ 保持Dockerfile DRY ✅ 版本控制所有配置 ✅ 文档化环境变量
故障排除
镜像过大(>500MB) → 使用多阶段构建,Alpine基础镜像,全面的.dockerignore
构建缓慢 → 优化层缓存,使用BuildKit,检查依赖项
容器立即退出
→ 检查日志:docker logs container-name
→ 验证CMD/ENTRYPOINT,检查端口冲突
更改未反映 → 不使用缓存重建,检查.dockerignore,验证卷挂载
快速参考
# 构建
./docker-build.sh -e prod -t latest
# 运行
./docker-run.sh -i app -t latest -d
# 日志
docker logs -f app
# 执行
docker exec -it app sh
# 清理
./docker-cleanup.sh --all --dry-run # 预览
./docker-cleanup.sh --all # 执行
CI/CD集成
GitHub Actions
- run: |
chmod +x docker-build.sh docker-push.sh
./docker-build.sh -e prod -t ${{ github.sha }}
./docker-push.sh -n app -t ${{ github.sha }} --repo username/app
GitLab CI
build:
script:
- chmod +x docker-build.sh
- ./docker-build.sh -e prod -t $CI_COMMIT_SHA
资源
脚本 (scripts/)
生产就绪的bash脚本,功能全面:
docker-build.sh- 构建镜像(400+行,彩色输出)docker-run.sh- 运行容器(400+行,自动冲突解决)docker-push.sh- 推送到注册表(多注册表支持)docker-cleanup.sh- 清理资源(干运行模式,选择性清理)
参考 (references/)
详细文档,按需加载:
docker-best-practices.md- 全面的Docker最佳实践(约500行)container-orchestration.md- 6+平台的部署指南(约600行)
资产 (assets/)
即用模板:
Dockerfile.production- 多阶段生产DockerfileDockerfile.development- 开发DockerfileDockerfile.nginx- 带Nginx的静态导出docker-compose.yml- 多容器编排.dockerignore- 优化的排除规则nginx.conf- 生产Nginx配置