Docker容器化技能Skill docker-containerization

Docker容器化技能提供全面的应用容器化解决方案,包括Dockerfile生成、Docker Compose配置、容器管理脚本和云平台部署指南。适用于Next.js、React、Node.js等现代Web应用的开发、测试和生产环境容器化,支持Kubernetes、AWS ECS、Google Cloud Run等主流云平台部署。关键词:Docker容器化,Dockerfile配置,容器编排,云原生部署,CI/CD流水线,微服务架构,镜像优化,多阶段构建。

Docker/K8s 0 次安装 3 次浏览 更新于 2/28/2026

name: docker-containerization description: 此技能应用于使用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、logs)
  • nginx.conf:生产就绪的Nginx配置,包含压缩、缓存、安全头

5. 参考文档

docker-best-practices.md 涵盖:

  • 多阶段构建详解
  • 镜像优化技术(减少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 Hubdocker.io/username/image
  • AWS ECR123456789012.dkr.ecr.region.amazonaws.com/image
  • Google GCRgcr.io/project-id/image
  • Azure ACRregistry.azurecr.io/image

4. 部署平台?

  • Kubernetes → 参见references/container-orchestration.md K8s部分
  • ECS → 参见ECS任务定义示例
  • Cloud Run → 参见部署命令
  • Docker Compose → 使用提供的compose文件

5. 需要哪些优化?

  • 镜像大小 → 多阶段构建,Alpine基础镜像
  • 构建速度 → 层缓存,BuildKit
  • 安全性 → 非root用户,漏洞扫描
  • 性能 → 资源限制,健康检查

使用示例

示例1:为生产环境容器化Next.js应用

用户:“为生产环境容器化我的Next.js应用”

步骤

  1. assets/Dockerfile.production复制到项目根目录作为Dockerfile
  2. assets/.dockerignore复制到项目根目录
  3. 构建:./docker-build.sh -e prod -n my-app -t v1.0.0
  4. 测试:./docker-run.sh -i my-app -t v1.0.0 -p 3000:3000 -d
  5. 推送:./docker-push.sh -n my-app -t v1.0.0 --repo username/my-app

示例2:使用Docker Compose进行开发

用户:“为本地开发设置Docker Compose”

步骤

  1. assets/Dockerfile.developmentassets/docker-compose.yml复制到项目
  2. 在docker-compose.yml中自定义服务
  3. 启动:docker-compose up -d
  4. 日志:docker-compose logs -f app-dev

示例3:部署到Kubernetes

用户:“将我的容器化应用部署到Kubernetes”

步骤

  1. 构建并将镜像推送到注册表
  2. 查看references/container-orchestration.md Kubernetes部分
  3. 创建K8s清单(deployment、service、ingress)
  4. 应用:kubectl apply -f deployment.yaml
  5. 验证:kubectl get pods && kubectl logs -f deployment/app

示例4:部署到AWS ECS

用户:“部署到AWS ECS Fargate”

步骤

  1. 构建并推送到ECR
  2. 查看references/container-orchestration.md ECS部分
  3. 创建任务定义JSON
  4. 注册:aws ecs register-task-definition --cli-input-json file://task-def.json
  5. 创建服务: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 - 多阶段生产Dockerfile
  • Dockerfile.development - 开发Dockerfile
  • Dockerfile.nginx - 带Nginx的静态导出
  • docker-compose.yml - 多容器编排
  • .dockerignore - 优化的排除规则
  • nginx.conf - 生产Nginx配置