一、背景
nexus之前已支持了maven/npm/composer,由于docker仓库和前面几个存在比较大的差异,所以我特此记录下走过的坑。希望能对后来者有所帮助~~(当然,docker私有仓库,大多数是推荐使用harbor,因为我这里的某些历史原因,就沿用nexus)
二、建立仓库
依次建立代理仓库、私有仓库、组合仓库。
需要注意的有以下几点:
- 代理仓库可以添加多个
- 私有仓库和组合仓库的端口号,必须暴露出去
- 组合仓库需要把代理仓库和私有仓库组合起来

先建立好存储空间:

2.1、代理仓库


https://nbi3meca.mirror.aliyuncs.com
2.2、私有仓库(既可以pull镜像,又可以push镜像)

2.3、组合仓库(仅限于pull镜像)

这里的顺序是:先二方库私有库,再是三方库代理库。

三、添加权限

四、docker客户端
4.1、配置
{
# 对应组合仓库的ip和端口
"registry-mirrors": ["http://192.168.5.6:8087"],
# 需要把组合仓库和私有仓库都加入进来
# 因为在推送镜像的时候是使用私有仓库,在拉取镜像的时候是使用组合仓库
"insecure-registries": [
"192.168.5.6:8086",
"192.168.5.6:8087"]
}重启,使配置生效
systemctl daemon-reload && systemctl restart docker
4.2、登录并保存认证
docker login 192.168.5.6:8086 -u admin -p 123456 docker login 192.168.5.6:8087 -u admin -p 123456
cat ~/.docker/config.json
{
"auths": {
"192.168.5.6:8086": {
"auth": "ywrtaw46mtizndu2"
},
"192.168.5.6:8087": {
"auth": "ywrtaw46mtizndu2"
},
"harbor.xx.cloud": {
"auth": "ywrtaw46sgfyym9xmtizndu="
}
}
}好处是不用重复认证,你可以使用如下方法进行解密。
echo -n "ywrtaw46mtizndu2" | base64 -d echo -n "ywrtaw46sgfyym9xmtizndu=" | base64 -d
同理,你更可以进行主动加密。
echo -n 'admin:123456' | base64
五、推送和拉取镜像
推送镜像
# 给构建好的image进行打tag docker tag xxx/devops-service:1.0.7 192.168.5.6:8086/xxx/devops-service:1.0.7 # 推送到指定的docker仓库 docker push 192.168.5.6:8086/xxx/devops-service:1.0.7
拉取镜像
docker pull 192.168.5.6:8086/xxx/devops-service:1.0.7
六、总结
6.1、走过的坑一:连接拒绝
没有暴露8086和8087端口
nexus是使用docker搭建的,需要进行一番修改。
[root@maven3 ~]# vi docker-compose.yml
version: '3'
services:
nexus:
restart: always
image: sonatype/nexus3
# image: docker.io/sonatype/nexus3
container_name: nexus3
ports:
- 8081:8081
- 8082:8082
- 8083:8083
- 8084:8084
- 8085:8085
# 新增8086和8087两个端口号
- 8086:8086
- 8087:8087
volumes:
- /opt/nexus:/opt/sonatype/nexus:z
- /data/nexus-data:/nexus-data:z重启nexus
[root@maven3 ~]# docker-compose down
stopping nexus3 ... done
removing nexus3 ... done
removing network root_default
[root@maven3 ~]# docker-compose up -d
creating network "root_default" with the default driver
creating nexus3 ... done
[root@maven3 ~]# docker ps
container id image command created status ports names
99f41bdf4993 sonatype/nexus3 "sh -c ${sonatype_..." 14 seconds ago up 13 seconds 0.0.0.0:8081-8087->8081-8087/tcp nexus3确保8086和8087端口都暴露出去了

6.2、404 not found
是因为没有realms:docker bearer token realm进行激活。
六、说在最后的话
- 一定要弄清楚端口号
- docker仓库和npm/maven/composer的差异甚大
到此这篇关于nexus搭建私有docker仓库的文章就介绍到这了,更多相关docker私有仓库搭建内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论