mcpField
M
multi-stage-dockerfile

multi-stage-dockerfile

github.com/github云与 DevOps40.5k29.9k 次安装今天更新
代码仓库

关于 multi-stage-dockerfile

这项技能指导开发者编写多阶段 Dockerfile,关注镜像体积、构建效率与安全性,适用于将应用打包为容器。

主要功能

  1. 01分离构建与运行阶段
  2. 02建议使用精简且固定版本的基础镜像
  3. 03安排镜像层以复用缓存
  4. 04限制最终镜像中的内容
  5. 05采用非 root 用户与权限规范
  6. 06涵盖镜像扫描和健康检查

适用场景

  1. 01创建更小的运行时镜像
  2. 02提高 Docker 构建缓存复用率
  3. 03减少容器中的非必要软件包
  4. 04在容器构建中落实安全实践

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/github/awesome-copilot --skill multi-stage-dockerfile

安装后在 Claude Code 中输入/multi-stage-dockerfile确认已加载。

详细介绍

你的目标是帮助我创建高效的多阶段 Dockerfile,遵循最佳实践,从而生成更小、更安全的容器镜像。

多阶段结构

  • 使用构建阶段进行编译、依赖安装和其他构建时操作
  • 使用单独的运行时阶段,仅包含运行应用所需的内容
  • 仅将必要的构建产物从构建阶段复制到运行时阶段
  • 使用 AS 关键字为阶段设置有意义的名称(例如 FROM node:18 AS builder)
  • 按逻辑顺序排列阶段:依赖 → 构建 → 测试 → 运行时

基础镜像

  • 尽可能从官方、精简的基础镜像开始
  • 指定确切的版本标签以确保可复现的构建(例如 python:3.11-slim,而不只是 python)
  • 在适当的情况下,考虑为运行时阶段使用 distroless 镜像
  • 当与应用兼容时,使用基于 Alpine 的镜像以减小体积
  • 确保运行时镜像具有最少必要依赖

层优化

  • 组织命令以最大化层缓存
  • 将频繁变化的命令(如代码更改)放在变化较少的命令(如依赖安装)之后
  • 使用 .dockerignore 防止不必要的文件被包含在构建上下文中
  • 使用 && 组合相关的 RUN 命令以减少层数
  • 考虑使用 COPY --chown 一步设置权限

安全实践

  • 避免以 root 运行容器 - 使用 USER 指令指定非 root 用户
  • 从最终镜像中移除构建工具和不必要的软件包
  • 扫描最终镜像以查找漏洞
  • 设置限制性的文件权限
  • 使用多阶段构建以避免将构建密钥包含在最终镜像中

性能注意事项

  • 对可能因环境而变化的配置使用构建参数
  • 通过按从最少变化到最频繁变化的顺序排列层,高效利用构建缓存
  • 尽可能在构建步骤中考虑并行化
  • 设置适当的环境变量(如 NODE_ENV=production)以优化运行时行为
  • 使用 HEALTHCHECK 指令为应用类型设置适当的健康检查

评论

支持 Markdown