1. 安装 Nexus3
安装部署参考:Nexus3 安装配置。
2. 配置 Docker 私有库
2.1 创建 blob 存储
为方便管理员进行仓库维护,建议按实际需要创建存储镜像的空间,如果不需要创建 blob
,则可跳过这一章节。
![](https://img.haomeiwen.com/i18088400/210f5ce0d53b2871.png)
给创建的存储空间命名
Type
选择File
,然后补全Name
信息,Path
路径会自动补全。![](https://img.haomeiwen.com/i18088400/b4fc9585a0b4ba9c.png)
然后保存即可。
PS,实际生产使用的时候,服务器的存储建议要在 500G 以上。
2.2 创建 hosted 类型的私有库
Nexus3 的仓库类型说明,可查看 Nexus3 仓库类型。
点击 Repository
下面的Repositories
– Create repository
– docker(hosted)
:
![](https://img.haomeiwen.com/i18088400/b241bb517d98dfe4.png)
-
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。
整体配置截图如下:
![](https://img.haomeiwen.com/i18088400/aa98cab0ff63164c.png)
2.3 创建 proxy 类型的代理库
点击 Repository
下面的Repositories
– Create repository
– docker(proxy)
。
在Name
这里填入当前仓库的名称,例如,docker-proxy-dockerhub 。
![](https://img.haomeiwen.com/i18088400/89f04e4f32f9da2f.png)
在 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
这里的对勾。
![](https://img.haomeiwen.com/i18088400/ab119120daa95e31.png)
在 Storage
- Blob store
这里,为当前配置的代理仓库选择前面创建的存储。
去掉 Negative Cache
- Not found cache enabled
这里的对勾。
![](https://img.haomeiwen.com/i18088400/bac375c73bcbd40a.png)
重复操作,创建完成 3 个仓库:docker-proxy-dockerhub、docker-proxy-k8sgcr、docker-proxy-quayio。
![](https://img.haomeiwen.com/i18088400/b4f9ac00c54b6829.png)
2.4 创建 group 类型的仓库
点击 Repository
下面的Repositories
– Create repository
– docker(group)
。
在 Name
这里填入当前仓库的命名,例如 docker-proxy-group
在 Repository Connectors
这里,勾选 HTTP
并填入一个未被占用的端口,必须与创建容器时映射的端口号一致。这里我使用 2000。
![](https://img.haomeiwen.com/i18088400/93af6f595c32e99d.png)
在 Storage
- Blob store
这里选择前面给它创建的存储。
![](https://img.haomeiwen.com/i18088400/3d3e66d4a06abce9.png)
在 Group
- Member repositorles
这里,将需要整合的仓库添加到右边,并按先后顺序排好。这里我需要整合 DockerHub 和 quay.io 两个仓库的代理,即 docker-proxy-dockerhub 和 docker-proxy-quayio。
![](https://img.haomeiwen.com/i18088400/6e16aa68c2431ef4.png)
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
网友评论