一、背景
Nexus之前已支持了nuget,由于docker仓库和前面几个存在比较大的差异,所以我特此记录下走过的坑。希望能对后来者有所帮助~~(当然,docker私有仓库,大多数是推荐使用harbor,因为我这里的某些历史原因,就沿用nexus)
二、建立仓库
依次建立代理仓库、私有仓库、组合仓库。
需要注意的有以下几点:
- 代理仓库可以添加多个
- 私有仓库和组合仓库的端口号,必须暴露出去
- 组合仓库需要把代理仓库和私有仓库组合起来
先建立好存储空间:
2.1、代理仓库
2.2、私有仓库(既可以pull镜像,又可以push镜像)
2.3、组合仓库(仅限于pull镜像)
这里的顺序是:先二方库私有库,再是三方库代理库。
三、添加权限
四、docker客户端
4.1、配置
1
2
3
4
5
6
7
8
9
|
{ # 对应组合仓库的ip和端口 "registry-mirrors": ["http://192.168.5.6:8087"], # 需要把组合仓库和私有仓库都加入进来 # 因为在推送镜像的时候是使用私有仓库,在拉取镜像的时候是使用组合仓库 "insecure-registries": [ "192.168.5.6:8086", "192.168.5.6:8087"] } |
重启,使配置生效
1
|
systemctl daemon-reload && systemctl restart docker |
4.2、登录并保存认证
1
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
1
2
3
4
5
6
7
8
9
10
11
12
13
|
{ "auths" : { "192.168.5.6:8086" : { "auth" : "YWRtaW46MTIzNDU2" }, "192.168.5.6:8087" : { "auth" : "YWRtaW46MTIzNDU2" }, "harbor.xx.cloud" : { "auth" : "YWRtaW46SGFyYm9xMTIzNDU=" } } } |
好处是不用重复认证,你可以使用如下方法进行解密。
1
2
|
echo -n "YWRtaW46MTIzNDU2" | base64 -d echo -n "YWRtaW46SGFyYm9xMTIzNDU=" | base64 -d |
同理,你更可以进行主动加密。
1
|
echo -n 'admin:123456' | base64 |
五、推送和拉取镜像
推送镜像
1
2
3
4
|
# 给构建好的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 |
拉取镜像
1
|
docker pull 192.168.5.6:8086 /xxx/devops-service :1.0.7 |
六、总结
6.1、走过的坑一:连接拒绝
没有暴露8086和8087端口
nexus是使用docker搭建的,需要进行一番修改。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[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
1
2
3
4
5
6
7
8
9
10
|
[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仓库和maven/nuget的差异甚大