使用harbor 镜像docker方法

背景

因为现在太多镜像源不稳定,而且随时就不能用了,为了加速和方便使用,想用harbor自己搭一个代理,也可以用来上传自己的镜像自己用,
搭建过程很简单,不做赘述,这里主要讨论一个hrabor我想不改变tag的名字的情况下。方便我快速的去拉取,并且不需要更改dockerfile。
一般情况下,我们要使用自己的build的镜像,然后打tag 然后再上传到harbor,但是这样必须要加上harbor的ip地址或者域名,这样的话pull的时候就必须加IP地址,这样就需要更改dockerfile。现在用两种办法解决。

你想在 Docker 客户端写死一个“别名”,比如平时 docker pull myimage:latest 就能自动去 Harbor,不用每次写 harbor.xxx.com/myproject/myimage:latest

不幸的是,Docker 的设计里镜像名的第一段就是 registry 域名
如果你不写,Docker 默认就去官方的 docker.io/library 拉取。
/etc/docker/daemon.json 里的 insecure-registries 只是告诉 Docker“这些 registry 可以 http”,并不能帮你做域名替换。

所以有三种可行方案:


✅ 方案1:在本地搭一个“registry mirror”

daemon.json 里可以设置:

{
  "registry-mirrors": ["https://harbor.example.com"]
}

这样当你 docker pull library/nginx:latest 时,Docker 会去你设置的 mirror 看有没有。如果 Harbor 配置成 mirror(它镜像了 Docker Hub),这个就行。

缺点:Harbor 必须配置为 proxy cache(Harbor 支持这种模式)。


✅ 方案2:改 DNS / hosts

/etc/hosts 里把 docker.io 指向你的 Harbor IP,比如:

1.2.3.4 registry-1.docker.io
1.2.3.4 auth.docker.io

这就是“欺骗” Docker 以为 docker.io 是你的 Harbor。但这样有风险:

  • Harbor 必须支持 Docker Hub API 的路径(否则 docker client 拉不到)
  • 会影响你正常从 Docker Hub 拉镜像

不推荐。


✅ 方案3:Harbor 自建项目名 = 你想用的名字

在 Harbor 上把项目/镜像名做成和你习惯的一样:
比如 Harbor 地址 harbor.example.com/library/nginx:latest,你可以在本地打 tag:

docker tag nginx:latest harbor.example.com/library/nginx:latest
docker push harbor.example.com/library/nginx:latest

之后你还是得 docker pull harbor.example.com/library/nginx:latest,但至少路径一致。


🔧 总结

  • daemon.json 只能控制安全/镜像站/加速,不能改名字映射
  • 真要省略域名,就只能做 Harbor Proxy Cache 模式,或者在 /etc/hosts 强行替换 docker.io 域名
  • 最标准可靠的方法:在镜像名里写 registry 域名

所以综上其实只有两种办法解决,第一是harbor 做镜像,第二就是改hosts。如果你是自己编译的images,改hosts是一个比较好的选择

以下截图是harbor 做dockrhub镜像,没有去弄代理,没有完成只是步骤,我准备使用第二种方法去改hosts文件

image

好的 👍,Harbor 从 2.0 开始就内置了 Proxy Cache(代理缓存) 功能,可以把 Docker Hub(或任何 v2 registry)当上游,Harbor 自动代理并缓存。这样客户端只要在 daemon.json 里配好 registry-mirrors,拉取 docker.io/nginx 时就会从你的 Harbor 拿。


📝 步骤

1. 在 Harbor 创建一个 Proxy Cache 项目

  1. 用管理员账号登录 Harbor Web UI

  2. 点左侧 Projects → + New Project

  3. 填:

    • Project Name:随便,比如 dockerhub-proxy

    • Access Level:Public(一般镜像站都是公开的)

    • Project Type:选择 Proxy Cache

    • Endpoint URL:填上游仓库地址,比如 Docker Hub:

      https://registry-1.docker.io
      
    • Provider:选择 Docker Hub(2.6+有下拉选项)

    • 如果需要,可以配置上游的认证(私有 registry 才用得到)

  4. 创建完成后,你的 Harbor 里就多了一个 Proxy Cache 项目。

⚠️ Proxy Cache 项目一开始是空的,只有当客户端拉取某个镜像时,Harbor 才会去上游拉并缓存。


2. 配置 Docker 客户端

在要拉镜像的机器上,编辑 /etc/docker/daemon.json

{
  "registry-mirrors": ["https://harbor.example.com"]
}

如果你的 Harbor 用的是自签名证书或 http,要同时加 "insecure-registries": ["harbor.example.com"]

重启 Docker:

sudo systemctl restart docker

3. 拉取镜像

现在就可以直接用原来的镜像名:

docker pull library/nginx:latest

Docker Engine 会把 docker.io/library/nginx 的请求发给 harbor.example.com
Harbor 第一次会去 Docker Hub 拉取并缓存到本地;以后相同 tag 就从缓存取,速度快很多。


4. 验证缓存

在 Harbor Web UI → 进入 dockerhub-proxy 项目 → Repositories
你会看到刚才拉的镜像和 tag 已经出现了。


5. 可选:多个上游

Harbor Proxy Cache 允许为不同项目设置不同上游,例如:

  • dockerhub-proxy → Docker Hub
  • gcr-proxygcr.io
  • quay-proxyquay.io

客户端只要在镜像名前加项目名即可,如:

docker pull harbor.example.com/gcr-proxy/google-containers/pause:3.6

💡 总结

  • Harbor Proxy Cache = Harbor 做 Docker Hub 的代理缓存
  • 客户端通过 registry-mirrors 重定向 docker.io
  • 第一次拉镜像时 Harbor 后台去 Docker Hub 拉并缓存,后续直接用本地缓存
posted @ 2025-09-28 15:09  学不会xuebuhui  阅读(87)  评论(0)    收藏  举报
Language: javascript //图片预览