使用 Nexus3 配置 Docker 私有库(待完善)

2023-08-07  本文已影响0人  Eroc

1. 安装 Nexus3


安装部署参考:Nexus3 安装配置

2. 配置 Docker 私有库


2.1 创建 blob 存储

为方便管理员进行仓库维护,建议按实际需要创建存储镜像的空间,如果不需要创建 blob,则可跳过这一章节。

创建blob存储1
给创建的存储空间命名Type选择File,然后补全Name信息,Path路径会自动补全。
创建blob存储2
然后保存即可。

PS,实际生产使用的时候,服务器的存储建议要在 500G 以上。

2.2 创建 hosted 类型的私有库

Nexus3 的仓库类型说明,可查看 Nexus3 仓库类型

点击 Repository下面的RepositoriesCreate repositorydocker(hosted) :

hosted 库

Docker registry默认使用的是API v2, 但是为了兼容性,我们可以勾选启用API v1。

Blob store:我们下拉选择前面创建好的专用blob:idocker-hub。

开发环境,我们运行重复发布,因此Delpoyment policy 我们选择Allow redeploy。

整体配置截图如下:

hosted 库配置

2.3 创建 proxy 类型的代理库

点击 Repository下面的RepositoriesCreate repositorydocker(proxy)

Name这里填入当前仓库的名称,例如,docker-proxy-dockerhub 。

proxy 库

Proxy - Remote storage 这里,配置 DockerHub 代理时填入 https://registry-1.docker.io,配置 K8s 仓库时填入https://k8s.gcr.io,配置 quay.io 仓库时填入https://quay.io

Proxy - Docker Index 这里,配置 DockerHub 代理时选择 Use Docker Hub,配置其他仓库代理时选择 Use proxy registry(specified above)

去掉 Proxy - Auto blocking enabled 这里的对勾。

proxy 库配置 1

Storage - Blob store 这里,为当前配置的代理仓库选择前面创建的存储。

去掉 Negative Cache - Not found cache enabled 这里的对勾。

proxy 库配置 2

重复操作,创建完成 3 个仓库:docker-proxy-dockerhub、docker-proxy-k8sgcr、docker-proxy-quayio。

proxy 库列表

2.4 创建 group 类型的仓库

点击 Repository下面的RepositoriesCreate repositorydocker(group)

Name 这里填入当前仓库的命名,例如 docker-proxy-group

Repository Connectors 这里,勾选 HTTP 并填入一个未被占用的端口,必须与创建容器时映射的端口号一致。这里我使用 2000。

group 库配置 1

Storage - Blob store 这里选择前面给它创建的存储。

group 库配置 2

Group - Member repositorles 这里,将需要整合的仓库添加到右边,并按先后顺序排好。这里我需要整合 DockerHub 和 quay.io 两个仓库的代理,即 docker-proxy-dockerhub 和 docker-proxy-quayio。

group 库配置 3

2.5 配置 Docker 认证

Security - Realms 选项中,将Docker Bearer Token Realm添加到右边,保存即可。

3. 常见错误


docker pull

错误 log :

Head "https://<nexus3_ip>/v2/<docker_group_name>/<image_name>":http:server gave HTTP respose to HTTPS client

问题分析:

搭建的 Nexus3 私服,使用的是 http 协议;docker 下载镜像时默认下载的是 https 协议的链接,所以导致失败。

解决方案:

# 修改本地 /etc/docker/daemon.json 文件,如果没有,则新建
vim /etc/docker/daemon.json

{
    "insecure-registries":"<nexus3_ip>:<docker_group_port>"
}

# 保存推出后,重启 docker 服务,此处需要 sudo 权限
systemctl daemon-reload && systemctl restart docker

上一篇 下一篇

猜你喜欢

热点阅读