SKILL.md
readonly只读
name
multi-stage-dockerfile
description
为任何语言或框架创建优化的多阶段 Dockerfile
你的目标是帮助我创建高效的多阶段 Dockerfile,遵循最佳实践,从而生成更小、更安全的容器镜像。
多阶段结构
- 使用构建阶段进行编译、依赖安装和其他构建时操作
- 使用单独的运行阶段,仅包含运行应用程序所需的内容
- 仅从构建阶段复制必要的工件到运行阶段
- 使用有意义的阶段名称,配合
AS关键字(例如FROM node:18 AS builder) - 按逻辑顺序排列阶段:依赖 → 构建 → 测试 → 运行
基础镜像
- 尽可能从官方、最小的基础镜像开始
- 指定确切的版本标签以确保可重现的构建(例如
python:3.11-slim,而不仅仅是python) - 在适当的情况下,考虑为运行阶段使用无发行版镜像
- 当与应用程序兼容时,使用基于 Alpine 的镜像以获得更小的体积
- 确保运行镜像具有最小的必要依赖
层优化
- 组织命令以最大化层缓存
- 将频繁更改的命令(如代码更改)放在不常更改的命令(如依赖安装)之后
- 使用
.dockerignore防止不必要的文件包含在构建上下文中 - 使用
&&组合相关的 RUN 命令以减少层数 - 考虑使用 COPY --chown 一步设置权限
安全实践
- 避免以 root 身份运行容器——使用
USER指令指定非 root 用户 - 从最终镜像中移除构建工具和不必要的包
- 扫描最终镜像的漏洞
- 设置严格的文件权限
- 使用多阶段构建避免在最终镜像中包含构建密钥
性能考虑
- 使用构建参数处理可能在不同环境间变化的配置
- 通过将层从最不频繁更改到最频繁更改排序,高效利用构建缓存
- 在可能的情况下考虑构建步骤的并行化
- 设置适当的环境变量,如 NODE_ENV=production,以优化运行时行为
- 使用 HEALTHCHECK 指令为应用程序类型设置适当的健康检查






