Nexus搭建Docker私有仓库
前言
Nexus3是Sonatype提供的仓库管理平台,Nuexus Repository OSS3能够支持Maven、npm、Docker、YUM、Helm等格式数据的存储和发布;并且能够与Jekins、SonaQube和Eclipse等工具进行集成。Nexus3支持作为宿主和代理存储库的Docker存储库,可以直接将这些存储库暴露给客户端工具;也可以以存储库组的方式暴露给客户端工具,存储库组是合并了多个存储库的内容的存储库,能够通过一个URL将多个存储库暴露给客户端工具,从而便于用户的使用。通过nexus3自建能够有效减少访问获取镜像的时间和对带宽使用,并能够通过自有的镜像仓库共享企业自己的镜像。在本文中,采用Docker方式安装部署Nexus3。
安装部署
安装nexus
https://help.sonatype.com/repomanager3/product-information/download
docker run -d -p 8081:8081 -p 8082:8082 -p 8083:8083 -p 8084:8084 \
--net mynet --ip 172.172.0.11 \
--name nexus3 \
--user root \
--privileged=true \
--restart=unless-stopped \
-e NEXUS_CONTEXT=nexus \
-v /root/docker_data/nexus3/nexus-data:/nexus-data \
sonatype/nexus3:3.36.0
访问网页端
http://10.211.55.81:8081 默认账号密码: admin/admin123
创建私有镜像仓库
repository的类型
hosted
,本地仓库,通常我们会部署自己的构件到这一类型的仓库。比如公司的第二方库。proxy
,代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。group
,仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。
创建 docker(hosted) 类型的仓库
用于将自己的镜像上传至私库。
在创建镜像仓库的页面中,设置镜像仓库的相关信息,包括名称、HTTP端口、是否允许匿名拉取镜像等信息。这里需要注意的是,
此处的HTTP端口(此处的值为8082)很重要,后续拉取和推送进行是使用此端口进行的,而不是nexus本身对外暴露的端口。
创建 docker(proxy) 类型的仓库
用于从外网仓库中拉取镜像至本地仓库中。点击“create Repository”,选择docker(proxy)进行创建
创建 docker(group) 类型的仓库
用于pull镜像至本地使用,可下载外网镜像和从本地push到私库的镜像
配置docker Realm
将Docker Bearer Token Realm配置到右边,点击save即可
修改docker配置
IP地址为私库服务器的IP地址,端口为创建docker group和docker hosted填写的端口,在/etc/docker/daemon.json
文件中添加下面的内容:
[root@xiaosige ~]# cat /etc/docker/daemon.json
{
"insecure-registries":["10.211.55.81:8082","10.211.55.81:8084"]
}
[root@xiaosige ~]# systemctl daemon-reload
[root@xiaosige ~]# systemctl restart docker
[root@xiaosige ~]# docker info
Insecure Registries:
10.211.55.81:8082 #生效了
127.0.0.0/8
上传、拉取镜像
- 登录私服
[root@xiaosige ~]# docker login 10.211.55.81:8082 Username: admin Password: admin123 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 #登录成功
注意:登录时,需要提供用户名和密码。认证的信息会被保存在~/.docker/config.json文件,在后续与私有镜像仓库交互时就可以被重用,而不需要每次都进行登录认证。
- 上传镜像
[root@xiaosige .docker]# docker pull hello-world Using default tag: latest latest: Pulling from library/hello-world 2db29710123e: Pull complete Digest: sha256:37a0b92b08d4919615c3ee023f7ddb068d12b8387475d64c622ac30f45c29c51 Status: Downloaded newer image for hello-world:latest docker.io/library/hello-world:latest [root@xiaosige .docker]# docker tag hello-world 10.211.55.81:8082/helloworld:1.0 [root@xiaosige .docker]# docker push 10.211.55.81:8082/helloworld:1.0 The push refers to repository [10.211.55.81:8082/helloworld] e07ee1baac5f: Layer already exists 1.0: digest: sha256:f54a58bc1aac5ea1a25d796ae155dc228b3f0e11d046ae276b39c4bf2f13d8c4 size: 525 [root@xiaosige .docker]#
- 拉取镜像
[root@xiaosige .docker]# docker pull 10.211.55.81:8082/helloworld:1.0 1.0: Pulling from helloworld 2db29710123e: Pull complete Digest: sha256:f54a58bc1aac5ea1a25d796ae155dc228b3f0e11d046ae276b39c4bf2f13d8c4 Status: Downloaded newer image for 10.211.55.81:8082/helloworld:1.0 10.211.55.81:8082/helloworld:1.0
权限管理
创建用户:
默认是使用admin
登录的,权限太高,可以给用户单独创建账号
建立 docker
角色组,权限为 nx-repository-view-docker-*-*
建立新用户,并加入为 docker
角色组
登录
[root@xiaosige .docker]# docker logout 10.211.55.81:8082
Removing login credentials for 10.211.55.81:8082
[root@xiaosige .docker]# docker login 10.211.55.81:8082
Username: leeze
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
[root@xiaosige .docker]#