Docker容器化技能 docker-containerization

Docker容器化技能专为现代化Web应用(如Next.js、React、Node.js)提供全面的容器化解决方案。该技能涵盖Dockerfile生成、docker-compose配置、容器管理脚本以及多平台部署指南,支持开发、生产、CI/CD全流程。关键词:Docker容器化、多阶段构建、容器编排、Kubernetes部署、云原生、DevOps自动化、镜像优化、微服务部署、CI/CD集成、云平台部署。

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

名称: 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. 参考文档

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配置