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
 

映射端口对应的用途:
8081:可以通过http访问nexus应用
8082:docker(hosted)私有仓库,可以pull和push
8083:docker(proxy)代理远程仓库,只能pull
8084:docker(group)私有仓库和代理的组,只能pull

  使用参数 -v 建立宿主机与Docker目录映射关系,/nexus-data:docker里存nexus数据目录,所以将数据目录存放到宿主机/root/docker_data/nexus3/nexus-data

访问网页端

http://10.211.55.81:8081 默认账号密码: admin/admin123

创建私有镜像仓库

repository的类型

  1. hosted,本地仓库,通常我们会部署自己的构件到这一类型的仓库。比如公司的第二方库。
  2. proxy,代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。
  3. 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

上传、拉取镜像

  1. 登录私服
    [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文件,在后续与私有镜像仓库交互时就可以被重用,而不需要每次都进行登录认证。
  2. 上传镜像
    [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]# 
  3. 拉取镜像
    [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]#