Skip to content

Repository files navigation

HR Docker 批量构建工具 — 使用手册

一款跨平台桌面工具:把多个 .NET 项目(.csproj / .sln)批量构建为 Docker 镜像,支持 amd64 / arm64 任意宿主交叉构建,产物可导出为镜像文件、本地加载或推送私有 Registry,全程图形界面 + 实时日志,中英双语。

面向开发者/维护者的技术方案与开发记录见 docs/开发计划.md。


1. 环境要求

依赖 说明
操作系统 Windows 10/11、Linux(glibc 系发行版)、macOS(Apple Silicon)
Docker Docker Desktop(Windows 需启用 WSL2)或 Docker Engine,自带 buildx
磁盘 建议预留 ≥ 10 GB(基础镜像与导出 tar 包)

工具本身不需要外网;构建过程是否联网取决于你的项目与离线方案(见 §7)。

2. 下载与安装

前往 Releases 页面 下载对应平台的安装包:

平台 文件 安装方式
macOS (Apple Silicon) *.dmg 打开后拖入 Applications
Windows (x64) *.msi 双击安装
Linux (x86_64) *_amd64.deb sudo apt install ./HR.Docker.Builder_<版本>_amd64.deb
Linux (x86_64,免安装) *_amd64.AppImage chmod +x 后直接运行
Linux (ARM64) *_arm64.deb / *_aarch64.AppImage 同上(v0.1.2 起提供)

首次启动会自动检测 Docker 环境(docker / buildx / daemon / builder),异常时顶部会出现黄色提示条并给出修复入口。

3. 快速上手(一次批量构建 5 步)

  1. 新建项目:左侧栏「新建项目」,一个项目对应一个代码库/服务分组;
  2. 添加程序:点工具条「+ 添加程序」——选择 .csproj/.sln(可用「根据项目文件带出路径」自动填 Dockerfile/上下文),填镜像名与默认版本;构建上下文留空即跟随项目设置(项目也留空则跟随 Dockerfile 所在目录),也可自定义覆盖;
  3. 配架构与去向(项目属性,防误操作):点项目条上的 ✎ 编辑——「架构」选 amd64 / arm64 / 双架构;「输出」勾选 导出文件(主要方式)/ 本地加载 / 推送 Registry(至少一项,可组合)。顶栏以徽标只读展示当前项目配置;
  4. 开始构建:勾选要构建的程序 → 点「开始构建」,队列按「并发」「策略」(失败即中止 / 失败继续)执行;
  5. 看结果:右侧日志面板实时输出(全局与按程序分 tab),结束后显示汇总(成功/失败/取消/跳过),导出的 tar 文件可一键「打开所在目录」。

4. 界面说明

┌──────────────────────────────────────────────────────────────┐
│ Docker栏: ●Docker ✓ 平台列表 [一键修复] ⟳ │ ☁导出包 ☁导入包 ⚙设置 🌐语言 │
│ 工具条:   [架构:amd64 | 输出:导出文件] 📁导出目录  [+添加程序] [开始构建] │
├───────────────────────────────────┬───────────────────────┤
│ 项目列表  │ 程序表格                 │ 日志面板               │
│ (左栏)   │ 程序/镜像/状态/最近构建    │ tabs: 全部│程序A│程序B  │
│ [+新建✎] │ (行内编辑/删除)         │ 实时输出·虚拟滚动       │
└──────────┴─────────────────────────┴───────────────────────┘
  • 项目:程序的分组,可单独设置「镜像导出目录」(留空用全局默认:数据根目录/exports)与「构建上下文目录」(项目默认,程序上下文留空时跟随;两者都留空则各程序默认用其 Dockerfile 所在目录),可复制;
  • 程序:一个可构建单元(项目文件 + Dockerfile + 上下文 + 镜像名 + 版本 + 构建参数),列表复选框勾选即参与构建(入队);
  • 状态徽标:构建中 / 成功 / 失败 / 已取消 / 已跳过;路径无效时标「路径不存在」。
  • 齿轮菜单:「全局设置」与「关于」——关于页展示当前版本号、简介与技术栈。
  • 架构/输出去向为只读徽标:在左侧项目的 ✎ 编辑弹窗中修改,构建页仅展示(未勾选的去向呈半透明)。
  • 布局分区:Docker 环境栏右端为全局功能(离线包导出/导入、设置、语言——任何时刻可用,含环境检测中);工具条只留构建操作流(项目配置一览、导出目录链接、添加程序、开始/取消构建)。

5. 设置(工具条「设置」)

项 说明
私有 Registry 前缀 勾选「推送 Registry」时必填,如 harbor.hr.com/hr;不推送可留空
镜像文件导出目录 导出 tar 的默认目录,文件名 {镜像名}-{版本}[-{架构}].tar(架构标识可选,见「命名」;docker 格式,docker load 即用)
Builder 名称 buildx 构建器实例名(默认 hr-builder,仅交叉架构构建使用;同架构自动走 default builder)
导出文件名带架构标识 镜像 tag 固定为 {镜像名}:{默认版本}(程序设置,不含时间/架构);开启导出 {镜像名}-{版本}-{架构}.tar,关闭导出 {镜像名}-{版本}.tar。双架构是两条独立构建(v1 不合并 manifest),靠该开关区分两份 tar,关闭时后写覆盖先写
数据目录 项目配置、构建日志、默认导出与离线数据的存放根目录;留空用系统默认,更改重启生效并自动迁移
构建参数预设 每行一个 KEY=VALUE,全项目共享,程序表单里点选即用(同键互斥替换)
NuGet 离线目录 独立分区维护;对所有程序构建注入 NUGET_PACKAGES 参数,留空不注入

设置面板(Docker Desktop 风格):左侧菜单四个分区、右侧对应表单——「构建」(并发数、失败策略)/「Registry」(仓库前缀)/「命名」(Builder 名称、导出文件名架构标识)/「数据」(数据目录)。每个分区独立保存,互不影响。工具条上的架构、产物去向随选随存。

6. Docker 环境与一键修复

顶部黄条按检测结果给出动作:

  • 未检测到 docker / daemon 未运行:安装或启动 Docker,就绪后自动恢复(或点「刷新环境」);
  • 未检测到 buildx:升级 Docker Desktop / Engine;
  • builder 不存在:点「一键修复(创建 builder)」——仅交叉架构构建需要,同架构构建自动走 default builder;
  • 交叉架构缺 QEMU:点「安装 QEMU(binfmt)」。注意 .NET 项目使用默认多架构模板($BUILDPLATFORM 编译 + 交叉发布)时通常不需要 QEMU,仅当镜像必须运行目标架构代码时才用到。

构建器选择规则(自动,无需配置):

  • 同架构(目标 = 本机):走 default builder,FROM 基础镜像优先使用本机 docker 已有镜像,本机没有才联网拉取——离线机导入镜像后可直接构建;
  • 交叉架构(如 amd64 机建 arm64):走 hr-builder(docker-container 驱动),需要 builder 就绪与 QEMU(按需)。

配置与日志存放:项目配置持久化在应用数据目录(com.hr.dockerbuilder)的 projects.json;每次构建日志落盘于日志目录(面板「打开日志目录」直达),备份/迁移只需拷这两个位置。

7. 内网 / 离线构建(含交叉架构)

无外网的机器可完成任意架构构建,v0.1.5 起离线包为 v2 格式(目录):

  1. 在线机:项目配好后点工具条「导出离线包」,选择范围(全部项目为默认;单项目增量交付选「仅当前项目」可显著减小包体)与目标目录 → 生成 offline-pack/ 文件夹:
    • images.tar:工具镜像 + 基础镜像(本机架构,走 docker 原生存储);
    • registry-data/:基础镜像的多架构完整数据(binfmt/buildkit/registry 工具镜像之外全部覆盖);
    • manifest.json:镜像清单与上游仓库映射。
  2. 将整个 offline-pack/ 目录经 U 盘/内网拷贝到离线机;
  3. 离线机:点「导入离线包」,选择该目录,自动完成:docker load → 启动本地 registry 容器(每个上游仓库一个,端口 5000+,常驻)→ 以 mirror 配置重建 builder → 注册 QEMU;
  4. 构建全程不出网:
    • 同架构:default builder 直接命中本机镜像库;
    • 交叉架构:hr-builder 的 buildkit 将 FROM xxx 解析请求发往本地 registry mirror(如 aspnet:8.0),命中即离线交付;mirror 未命中时自动回退上游(在线机器上无感)。

⚠️ v1 旧格式(单个 offline-pack.tar)不再支持,请在在线机重新导出一次。 卸载/重置:docker rm -f hr-offline-reg-0 等容器(名称见导入日志),删除应用数据目录下 offline/。

离线跨架构构建失败排查(如提示需在线访问基础镜像):

  1. 离线机是否执行过「导入离线包」?只拷贝 images.tar 手动 load 不够——交叉架构依赖导入流程启动的本地 registry mirror 与带 mirror 配置重建的 builder;
  2. 顶栏「环境信息」(或 设置 → Docker 环境)查看「离线 mirror」行是否就绪;未就绪时检查 hr-offline-reg-* 容器是否在运行(docker ps -a),必要时重新导入;
  3. Dockerfile 的 FROM 不要用 digest 固定引用(xxx@sha256:...)——digest 不走 mirror 通道、仅本机架构可用,请改用 tag 引用;
  4. 离线包是导出时快照:Dockerfile 基础镜像变更(换 tag、新增程序)后需在在线机重新导出;
  5. Linux 离线机:docker buildx inspect hr-builder 的 driver options 应含 network=host(新版导入流程自动带上;旧版重新导入一次即可触发重建);
  6. 导出/导入提示端口被占用:新版会自动顺延空闲端口(日志有"改用端口 X"记录);仍失败时用 netstat -ano | findstr :5000(Windows)排查占用进程。

.NET 还原离线方案:在「设置 → NuGet 离线」中配置离线 NuGet 包目录(全局生效,对所有程序构建注入 NUGET_PACKAGES 参数;或指向内网 NuGet 源),Dockerfile 模板已参数化支持。

常用构建参数(如 CONFIGURATION=Release)可在「设置 → 构建」中登记为预设,之后在程序表单里直接点选,无需手敲。

8. 常见问题

现象 处理
点「开始构建」提示未配置仓库 勾选了「推送 Registry」但未填前缀——去设置填写,或取消勾选
推送失败 先在系统终端 docker login <registry>,凭据由 docker 本身管理
构建中无法保存配置 队列运行期间禁止修改(「构建运行中,暂不可修改配置」),先取消或等结束
Apple Silicon 构建 amd64 很慢 属模拟执行;确认项目 Dockerfile 使用 $BUILDPLATFORM 交叉编译模板即可大幅提速
双架构构建产出两个镜像? 是的:按架构拆成两条任务,Tag 带 -amd64 / -arm64 区分,互不影响
Linux 装 deb 还是 AppImage deb 适合 Debian/Ubuntu 系常规安装;AppImage 单文件免安装,适合其他发行版或试用
日志太长卡顿 面板为虚拟滚动,且日志完整落盘文件,UI 仅保留尾部;用「打开日志目录」查完整记录

9. 版本历史

标题栏版本即当前版本;所有历史版本的下载入口见 Releases。

维护者发版流程(版本号同步、tag 触发 CI 自动发布)属于开发侧内容,见 docs/开发计划.md §11。

About

docker 构建工具

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages