外包运维4年,我给自己做了个内网 Docker 镜像管理工具(已开源)
写给每一个在内网、离线、信创环境里被 Docker 镜像管理折磨过的运维。
先说痛点
干运维的都知道,内网环境管理 Docker 镜像有多蛋疼:
官方 Registry 没有界面。 装好 registry:2 之后你面对的是裸 REST API——查个镜像列表要 curl,删个 tag 要拼 manifest digest,普通人根本没法用。每次有人问"仓库里都有啥",你都得现场表演命令行。
Harbor 太重。 企业级全家桶:数据库、多个组件、HA 架构、一堆依赖镜像。为了一个内网镜像仓库,部署一次要折腾一整天,离线环境更是地狱——所有依赖镜像你得提前一个个 docker save 带进去。杀鸡用牛刀,但你没得选。
Portainer 是通用容器管理。 它不是 Registry 专用工具,镜像仓库场景用着就是别扭——没有仓库视图、没有 manifest 管理、推送删除都得绕。
离线环境工具链本身是死结。 等保、保密、信创,越来越多环境是物理隔离的。你连装工具的镜像都拉不下来,这就是个鸡生蛋的问题。
我在这行 4 年,外包出身,各种奇奇怪怪的内网环境见了不少。每次都被这套组合拳打一遍。忍无可忍,我给自己写了个工具。
我做的东西
Nimbus Registry Console —— 本地 Docker Registry 管理控制台,专为内网/离线环境设计。
一句话:一个镜像,一条命令,构建 → 推送 → 部署全流程覆盖,断网也能用。
功能
| 功能 | 说明 |
|---|---|
| 工作台 | 系统状态概览、快速部署、镜像导入、活动日志 |
| 构建 | Dockerfile / Compose 编辑器、文件树、构建缓存管理、项目模板 |
| 仓库 | 本地镜像列表、Registry 仓库浏览、manifest 查看、推送 / 导出 / 删除 |
| 部署 | 容器管理(启动/停止/重启/移除)、Compose 项目管理、资源监控 |
| 工具箱 | 网络、卷、备份恢复、常用命令速查、设置 |
设计取舍
做的时候定了几个死原则:
- 离线优先。内置
OFFLINE_MODE,启动时自动校验必需镜像(registry:2、alpine:3.20)是否可用。断网环境开箱即用,这是和 Harbor 们最大的区别——它们是为在线环境设计的,离线是后补的。 - 零依赖后端。后端是纯 Node.js 原生
http.createServer,没有 Express 没有框架,约 900 行。镜像小、启动快、出问题好排查。 - 单容器部署。
docker compose up -d一条命令,arm64 / amd64 双架构,内网拷过去docker load就能用。 - 数据不丢。SQLite + 命名卷持久化,重建容器镜像不清数据。
快速开始
docker compose up -d
# 推送镜像到内置 Registry
docker tag my-app:latest 127.0.0.1:5001/my-app:latest
docker push 127.0.0.1:5001/my-app:latest
技术栈
- 前端:Next.js 16 + React 19 + Vinext + Tailwind CSS v4(玻璃态暗色主题)
- 后端:Node.js 原生 HTTP Server(零框架依赖)
- 存储:SQLite + JSON 持久化
- 部署:Docker 多阶段构建,单容器
为什么开源
两个原因。
一是这东西本来就是从真实需求长出来的——外包 4 年见过太多环境,我知道它解决了什么问题,也知道还没解决什么。开源出来,让同样处境的人能用上,也让他们帮我挑毛病。
二是我准备转 SRE/DevOps 了。这个项目就是我的敲门砖——它证明我不只会"照着文档部署",还能从零设计一个解决真实问题的工具。star 数不重要,重要的是它真的能跑、真有人用。
开源地址
MIT 协议,随便用。有内网/离线部署的需求、踩了坑、或者想要什么功能,欢迎提 issue,我都会看。
如果它帮你省了哪怕半天时间,点个 star 就是最大的支持。
一个外包运维的转型自白。共勉。