用途:该技能用于编写安全、高效、易维护的容器镜像构建文件,遵循开源最佳实践,支持多架构构建。\n\n主要能力:确定项目语言/框架;在使用 Podman/Buildah 时检查宿主 SELinux 状态(如 getenforce);加载对应语言参考示例;按核心结构与模式编写 Containerfile,并遵循最终阶段指令顺序。\n\n关键规范:文件优先命名为 Containerfile,变体可用 alpine.Containerfile、distroless.Containerfile、ubi.Containerfile;每个文件必须以 # syntax=docker/dockerfile:1 开头;顶层仅定义 UID、VERSION、RELEASE,TARGETARCH 与 TARGETVARIANT 须在使用它们的每个阶段内声明;多阶段构建中最后阶段命名为 final,阶段分隔用 40 个 #;仅在需要非平凡设置时才单独设 base 阶段。\n\n缓存优化:为 apk、apt、pip、uv、dnf 等包管理器提供带 id 与 sharing=locked 的 cache mount 模式,并在使用缓存挂载的阶段内声明多架构变量。\n\n安全与权限:创建非 root 用户(Alpine 用 adduser,Debian/Ubuntu 用 groupadd/useradd);兼容 OpenShift 任意 UID,用 install -d 创建目录并以 --chown=$UID:0 --chmod=775 复制文件;必须复制许可证文件到 /licenses。\n\nSELinux:在 Fedora/RHEL/CentOS 等强制 SELinux 系统上使用 Podman/Buildah 时,--mount=type=bind 会因权限被拒而失败,需加 relabel=shared(或 relabel=private),并在 Containerfile 内联注释说明,同时在 README 或项目文档中记录构建要求。\n\n其他要点:用独立阶段下载并校验 SHA256 后使用 dumb-init 作为 PID 1;COPY 尽量使用 --link;最终阶段严格按顺序排列指令,LABEL 必须最后;HEALTHCHECK 在 OCI/podman 构建中不生效,除非特别要求否则不实现;可选 test、report、binary 阶段;提供 .containerignore/.dockerignore 模板与按语言分类的参考文件。\n\n限制:具体语言参考文件内容、各命令的完整示例与版本细节以原始资料为准,此处未全部展开;未提供收费、平台支持范围等额外信息。
containerfile-creator
部署与运维
更新于 10-15 23:32