docker-compose安装Nexus3,配置docker私有、代理、组合仓库
一、安装Nexus3
1、准备工作
安装docker和docker-compose
https://blog.csdn.net/weixin_37558119/article/details/108777662
2、docker-compose.yaml 配置
注:8081端口是开放给后台使用的,5000和5001端口是开放给仓库使用的,换成别的端口也可以,只要配置docker仓库时填写开放的端口就可以了
version: '3'
services:
nexus:
restart: always
image: sonatype/nexus3
container_name: nexus3
ports:
- 8081:8081
- 5000:5000
- 5001:5001
volumes:
- /usr/local/docker/nexus/nexus-data:/nexus-data
3、启动nexus
1)使用 docker-compose up -d 启动
2)启动后访问 http://192.168.40.147:8081/
3)登录用户名admin密码通过/usr/local/docker/nexus/nexus-data/admin.password 查看
登录后可修改密码为好记的密码
4、安装可能遇到问题
1)问题:
启动后通过docker ps -a查看nexus3的状态为退出,在docker-compose.yaml同级目录下可查看其启动的日志,通过 docker-compose logs -f 命令查看,发现没有权限访问宿主机创建文件目录
解决方法:
可手动创建 mkdir /nexus-data/instances 创建完后再查看状态为启动了
如果还未解决:
进到/usr/local/docker/nexus 授权 chmod 777 nexus-data/
二、配置docker仓库
1、概述
1)Nexus3 提供了的3种类型的Docker仓库,前两者都可以创建多个仓库,最后一个则可以将他们全部聚合到一个URL来访问。
docker (hosted): 自托管
docker (proxy): 代理
docker (group): 聚合
建议为你想要创建的每个新仓库创建一个新的blob store。这样,每个仓库的数据都将位于/nexus-data中的不同文件夹中(在Docker容器内)
2)下面打算创建三个仓库 docker-hub-hosted, docker-hub-proxy, docker-hub-group
分别创建三个blobs: docker-hub-hosted, docker-hub-proxy, docker-hub-group
group类型的docker仓库,是一个聚合类型的仓库。它能够仓库聚合成一个URL对外提供服务,可以屏蔽后端的差异性,实现类似透明代理的功能。
2、创建Blob Stores
1)填写name,路径会自动生成,你也可以自己修改挂载地址
2)分别创建三个Blob
3、配置仓库
1)配置hosted类型的
hosted类型仓库用作我们的私有仓库。注意红框中的配置
点击 Repository下面的 Repositories – Create repository – docker(hosted) :
- Name: 输入一个简洁直观的名字
- Online: 勾选。这个开关可以设置这个Docker repo是在线还是离线。
-
Repository Connectors
下面包含HTTP和HTTPS两种类型的port的作用?
连接器允许docker客户端直接连接到docker仓库,并实现一些请求操作,如docker pull, docker push, API查询等。
如果勾选并填写端口, Nexus就会启动一个监听到该端口的连接器。
我们使用http配置5001端口。 -
Allow anonymous docker pull
勾选。这样的话就允许匿名访问了,不勾选则执行docker pull或 docker push之前,都要先登录:docker login -
Docker Registry API Support
Docker registry默认使用的是API v2, 但是为了兼容性,我们可以勾选启用API v1。 -
Storage
Blob store,我们下拉选择前面创建好的专用blob:docker-hub-hosted -
Hosted
开发环境,我们运行重复发布,因此Delpoyment policy 我们选择Allow redeploy。
2)配置proxy类型的
proxy类型仓库,可以帮助我们访问不能直接到达的网络,如另一个私有仓库,或者国外的公共仓库,如Google cloud registry。注意红框中的配置,http不用写,我们一会通过group聚合提供仓库访问
-
点击 Repository下面的 Repositories – Create repository – docker(proxy) :
-
Name: 输入一个简洁直观的名字
-
Online: 勾选。这个开关可以设置这个Docker repo是在线还是离线。
-
Repository Connectors: 不设置。
– Allow anonymous docker pull
勾选。这样的话就允许匿名访问了,不勾选则执行docker pull或 docker push之前,都要先登录:docker login -
Docker Registry API Support
Docker registry默认使用的是API v2, 但是为了兼容性,我们可以勾选启用API v1。 -
Proxy
Remote Storage: 当配置docker hub的proxy时,这里填写: https://registry-1.docker.io
Docker Index: 当配置docker hub的Docker Index时,点选Use Docker Hub或者填写:https://index.docker.io/ -
Storage
Blob store,我们下拉选择前面创建好的专用blob:docker-hub-proxy
3)配置group类型的
group类型的docker仓库,是一个聚合类型的仓库。它可以将前面我们创建的2个仓库聚合成一个URL对外提供服务,可以屏蔽后端的差异性,实现类似透明代理的功能。注意红框中的配置,5000端口为部署nexus时开放的端口。
-
点击 Repository下面的 Repositories – Create repository – docker(group) :
-
Name: 输入一个简洁直观的名字,
-
Online: 勾选。这个开关可以设置这个Docker repo是在线还是离线。
-
Repository Connectors
这里我们勾选http并且填写端口 5000, Nexus就会启动一个监听到5000端口的连接器。 -
Allow anonymous docker pull
勾选。这样的话就允许匿名访问了,不勾选则执行docker pull或 docker push之前,都要先登录:docker login -
Docker Registry API Support
Docker registry默认使用的是API v2, 但是为了兼容性,我们可以勾选启用API v1。 -
Storage:选择专用的blob存储docker-hub-hosted
-
group : 将左边选择需要添加的仓库,添加到右边的members下;
三、客户端使用仓库
1、客户端配置
打开/etc/docker/daemon.json文件,增加仓库访问地址。
{
"registry-mirrors": [
"https://atd4ffxf.mirror.aliyuncs.com"
],
"insecure-registries": [
"192.168.40.147:5000",
"192.168.40.147:5001"
]
}
注意:
- 配置文件格式要写正确要不然一会docker重启会失败。
- 配置5000用于拉取镜像,5001用于上传私有镜像。如果不配登录不上。
-
可能遇到的问题:如果不使用SSL证书和域名,那么可能会遇到的问题: failed with status: 401 Unauthorized
解决方案:在Nexus上点击 Security->Realms->Docker Bearer Token Realm。
2、重新载入配置和重启docker
$ systemctl daemon-reload
$ systemctl restart docker
3、登录docker仓库
根据提示输入用户名和密码,这里用的是admin管理员账号,可以新建角色和账号进行登录。出现如下提示则登录成功,证明仓库可用了。需要pull登录5000,需要push登录5001.
$ docker login 192.168.40.147:5000
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
注意:登录如果提示如下错误,则是没有配置仓库访问地址,执行1进行配置就行了。
$ docker login 192.168.40.147:5000
Username: admin
Password:
Error response from daemon: Get https://192.168.40.147:5000/v2/: http: server gave HTTP response to HTTPS client
4、测试仓库的使用
1)通过代理pull
$ docker pull 192.168.40.147:5000/hello-world
Using default tag: latest
latest: Pulling from hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:8c5aeeb6a5f3ba4883347d3747a7249f491766ca1caa47e5da5dfcf6b9b717c0
Status: Downloaded newer image for 192.168.40.147:5000/hello-world:latest
192.168.40.147:5000/hello-world:latest
进入浏览器可以查看刚才下载的镜像
2)push到私库
例如push sonatype/nexus3的镜像
# 查看镜像
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.40.147:5000/tomcat latest 891fcd9c5b3a 5 days ago 647MB
prom/blackbox-exporter master 95508eae45d5 7 days ago 20.9MB
192.168.40.147:5000/sonatype/nexus3 latest 0ffbaec5b098 2 weeks ago 634MB
sonatype/nexus3 latest 0ffbaec5b098 2 weeks ago 634MB
prom/prometheus latest cdfc440228d0 5 weeks ago 168MB
# 修改tag
$ docker tag sonatype/nexus3:latest 192.168.40.147:5001/sonatype/nexus3:latest
# 上传镜像到私库
$ docker push 192.168.40.147:5001/sonatype/nexus3
The push refers to repository [192.168.40.147:5001/sonatype/nexus3]
2c321cafea42: Pushed
e9010fe1685e: Pushed
b7b591e3443f: Pushed
ccf04fbd6e19: Pushed
latest: digest: sha256:f6f2a2f36332d5757c19eb7416e30b02a0351550a4f55572346e037515c69d77 size: 1158
上传成功可以到仓库查看: