ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Ruby 官方镜像模板引擎揭秘:一个 Dockerfile.template 如何生成 18 份 Dockerfile

Ruby 官方镜像模板引擎揭秘:一个 Dockerfile.template 如何生成 18 份 Dockerfile Ruby 官方镜像模板引擎揭秘一个 Dockerfile.template 如何生成 18 份 Dockerfile【免费下载链接】rubyDocker Official Image packaging for Ruby项目地址: https://gitcode.com/gh_mirrors/ruby1/ruby这个仓库是Ruby 官方 Docker 镜像的打包工程Docker Official Image packaging for Ruby它只维护1 份Dockerfile.template模板和 1 份versions.json数据文件就能自动为3 个 Ruby 版本 × 6 种基础镜像变体 18 个Dockerfile完成构建定义。本文带你快速看懂这套模板引擎是怎么工作的。 想动手体验克隆仓库即可git clone https://gitcode.com/gh_mirrors/ruby1/ruby18 份 Dockerfile 从何而来3 × 6 矩阵打开仓库目录就能看到清晰的版本/变体两级结构Ruby 版本基础镜像变体6 种3.3trixie、slim-trixie、bookworm、slim-bookworm、alpine3.24、alpine3.233.4同上 6 种4.0同上 6 种Debian 系trixie/bookworm基于官方全量镜像自带构建工具链slim 系debian:xxx-slim精简版体积小但需手动补齐构建依赖alpine 系musl libc 的极简镜像再打一个瘦身补丁。6 种变体由versions.sh脚本统一生成并写进versions.json的variants字段是数据驱动的起点。模板骨架一套语法兼顾 3 种底层系统Dockerfile.template是仓库的核心约 260 行却要为三种截然不同的包管理系统apt / apk分别输出正确内容。它使用了gawk jq 模板语法{{ ... }}表达式块主要靠 3 个小助手is_alpine/is_slim根据当前变体名判断走哪条安装路径apk add还是apt-get installclean_apt按 Debian 发行版智能选择清理方式rm -rf /var/lib/apt/lists/*或apt-get dist-clean控制最终镜像体积数据注入模板中的{{ .version }}、{{ .url.xz }}、{{ .sha256.xz }}等占位符会在渲染时从versions.json中填入真实的版本号、源码下载地址和 SHA256 校验值。生成的 Dockerfile 开头会明确标注来源提醒维护者不要手改# NOTE: THIS DOCKERFILE IS GENERATED VIA apply-templates.sh # PLEASE DO NOT EDIT IT DIRECTLY. FROM alpine:3.23另外还有一个精巧细节为了让 Ruby 的YJIT 即时编译器跑起来模板会根据 CPU 架构amd64、arm64v8 等动态生成一段case分支选择对应架构的 Rust 工具链下载链接和校验值——这段数据表就存放在rust.json中。生成流程update.sh 一条命令走完全程整个流水线只有 4 个脚本串联起来非常干净脚本职责versions.sh抓取 ruby-lang.org 官方发布列表解析出最新版本、下载地址、SHA256合并rust.json后写入versions.jsonrust.sh维护 Rust 工具链数据YJIT 编译 Ruby 需要自动抓取各架构的 rustup 下载信息apply-templates.sh核心渲染器双重循环遍历版本 × 变体对每个组合执行gawk -f jq-template.awk Dockerfile.template输出到版本/变体/Dockerfilegenerate-stackbrew-library.sh生成 Docker 官方镜像构建系统Stackbrew所需的标签映射文件把3.4、latest、3.4-alpine等标签与架构、构建目录关联起来日常使用只需一个入口./update.sh它先跑versions.sh刷新数据再跑apply-templates.sh重新渲染全部 18 份 Dockerfile。这样设计的 4 个好处✅单一事实来源改一行模板18 份 Dockerfile 同步更新杜绝改了 3.4 忘了 3.3的疏漏✅升级极轻量Ruby 发新版只需更新versions.json里几个字段无需碰构建逻辑✅可信校验源码与 Rust 工具链都做了 SHA256 强校验并验证系统自带的 Ruby 已被清除✅镜像更瘦构建依赖在安装完成后统一卸载apk 删除 builddeps / apt auto-remove最终镜像只保留运行所需。文件地图想深入就从这里看起Dockerfile.template ← 模板本体一切的源头 versions.json ← 版本/下载地址/校验值/变体清单 versions.sh ← 数据刷新脚本 apply-templates.sh ← 渲染器模板 → 18 份 Dockerfile rust.json / rust.sh ← YJIT 所需 Rust 工具链数据 generate-stackbrew-library.sh ← 镜像标签与架构映射生成 update.sh ← 一键更新入口 3.3/ 3.4/ 4.0/ ← 渲染产物目录版本/变体/Dockerfile小结这套工程是模板 数据 脚本的经典三件套Dockerfile.template负责怎么做versions.json负责做什么apply-templates.sh负责批量做。理解了它你也能给任何多版本、多变体的 Docker 镜像库套上同样的自动化外壳。【免费下载链接】rubyDocker Official Image packaging for Ruby项目地址: https://gitcode.com/gh_mirrors/ruby1/ruby创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表