关于 multi-stage-dockerfile
这项技能指导开发者编写多阶段 Dockerfile,关注镜像体积、构建效率与安全性,适用于将应用打包为容器。
主要功能
- 01分离构建与运行阶段
- 02建议使用精简且固定版本的基础镜像
- 03安排镜像层以复用缓存
- 04限制最终镜像中的内容
- 05采用非 root 用户与权限规范
- 06涵盖镜像扫描和健康检查
适用场景
- 01创建更小的运行时镜像
- 02提高 Docker 构建缓存复用率
- 03减少容器中的非必要软件包
- 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