用 registry:3 做私有镜像仓库和 Docker Hub 缓存

我之前发版一直是手工: 1 2 3 4 5 本地 build 镜像 docker save 成 tar FTP 上传到服务器 服务器 docker load 重启容器 能用,但每次都很烦。镜像稍微大一点,上传和 load 都慢,也没有一个清楚的版本记录。所以根据以上步骤整理出来的需求如下: CI 能把业务镜像推上去 生产机器能拉下来 最好还能缓存一下 Docker Hub 的基础镜像 这种场景用 registry:3 就够了。 前提 由于 registry:3 限制,一个 registry cache 只能代理一个上游,所以私有镜像仓库和 Docker Hub 缓存分开运行。 比如: 1 2 registry.example.com # 存自己的业务镜像 mirror.example.com # 缓存(加速) Docker Hub 镜像 私有 Registry 先建目录: 1 2 mkdir -p /opt/registry/{data,auth} cd /opt/registry 生成登录账号: 1 2 docker run --rm --entrypoint htpasswd httpd:2 \ -Bbn woodpecker 'your-password' > auth/htpasswd docker-compose.yml: ...

2026年7月1日 · 2 分钟 · 浅忆

Git 移除仓库中的子模块(Submodule)

查看当前子模块 1 git submodule 输出类似: 1 a1b2c3d4 libs/foo (heads/main) 这里的 libs/foo 就是子模块路径。 也可以查看: 1 cat .gitmodules 输出类似: 1 2 3 [submodule "libs/foo"] path = libs/foo url = git@example.com:foo/bar.git 方法一:将 Submodule 转为普通目录(保留源码) 这种情况不直接删除目录,而是把子模块目录转换成普通目录。 Linux / macOS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ## 子模块目录 SUBMODULE=libs/foo ## 注销子模块 ## 会移除 .git/config 中的 submodule 配置 git submodule deinit -f "$SUBMODULE" ## 仅从 Git 索引中移除 ## 不删除本地代码 git rm --cached "$SUBMODULE" ## 删除 Git 对子模块的本地缓存 rm -rf ".git/modules/$SUBMODULE" ## 删除子模块目录内部的 Git 指向 ## 这里的 .git 可能是文件,也可能是目录 rm -rf "$SUBMODULE/.git" ## 重新作为普通目录加入 Git git add "$SUBMODULE" ## 提交变更 git commit -m "convert submodule to normal directory" Windows PowerShell 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ## 子模块目录 $SUBMODULE = "libs/foo" ## 注销子模块 ## 删除 .git/config 中的 submodule 信息 git submodule deinit -f $SUBMODULE ## 仅从 Git 索引中移除 ## 不删除本地代码 git rm --cached $SUBMODULE ## 删除 Git 对子模块的本地缓存 Remove-Item -Recurse -Force ".git/modules/$SUBMODULE" ## 删除子模块目录内部的 Git 指向 ## 这里的 .git 可能是文件,也可能是目录 Remove-Item -Recurse -Force "$SUBMODULE/.git" ## 重新添加为普通目录 git add $SUBMODULE ## 提交变更 git commit -m "convert submodule to normal directory" 方法二:删除 Submodule(不保留源码) Linux / macOS 下面命令仅需修改 SUBMODULE 字段。 ...

2026年2月21日 · 2 分钟 · 浅忆