使用 Nexus3 配置 Docker 私有库(待完善)
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下面的Repositories – Create repository – docker(hosted) :
hosted 库
-
Name: 定义一个名称docker-local -
Online: 勾选。这个开关可以设置这个Docker repo是在线还是离线。 -
Repository Connectors -
下面包含HTTP和HTTPS两种类型的port。
-
有什么用呢?说明讲得很清楚:
- 连接器允许docker客户端直接连接到docker仓库,并实现一些请求操作,如docker pull, docker push, API查询等。但这个连接器并不是一定需要配置的,尤其是我们后面会用group类型的docker仓库来聚合它。
我们把HTTP这里勾选上,然后设置端口为8083。
-
Force basic authentication勾选。这样的话就不允许匿名访问了,执行docker pull或 docker push之前,都要先登录:docker login
-
Docker Registry API Support
Docker registry默认使用的是API v2, 但是为了兼容性,我们可以勾选启用API v1。
Storage
Blob store:我们下拉选择前面创建好的专用blob:idocker-hub。
Hosted
开发环境,我们运行重复发布,因此Delpoyment policy 我们选择Allow redeploy。
整体配置截图如下:
hosted 库配置
2.3 创建 proxy 类型的代理库
点击 Repository下面的Repositories – Create repository – docker(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下面的Repositories – Create repository – docker(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