使用Nexus3构建Docker私有镜像仓库

1、安装Nexus3docker

Nexus3是Sonatype提供的仓库管理平台,Nuexus Repository OSS3可以支持Maven、npm、Docker、YUM、Helm等格式数据的存储和发布;而且可以与Jekins、SonaQube和Eclipse等工具进行集成。Nexus3支持做为宿主和代理存储库的Docker存储库,能够直接将这些存储库暴露给客户端工具;也能够以存储库组的方式暴露给客户端工具,存储库组是合并了多个存储库的内容的存储库,可以经过一个URL将多个存储库暴露给客户端工具,从而便于用户的使用。经过nexus3自建可以有效减小访问获取镜像的时间和对带宽使用,并可以经过自有的镜像仓库共享企业本身的镜像。在本文中,采用Docker模式安装部署Nexus3。npm

首先,建立一个目录,用于为Nexus3提供持久化存储。json

# mkdir -p /usr/local/docker/data/nexus-data && chown -R 200 /usr/local/docker/data/nexus-data

接着,就能够经过sonatype/nexus3镜像启动nexus3的容器化应用了。经过以下命令启动的nexus将对外暴露8081端口,并容器的持久化数据经过会存储在上述建立的空间中。在容器运行后,用户能够经过http://{host_ip}:8081访问nexus3应用,其中{host_ip}为容器所部署的宿主机的IP地址。8082端口是暴露出来让docker客户端访问私有镜像仓库,上传docker镜像所使用。vim

# docker run -d -p 8081:8081 -p 8082:8082 --restart=always --name nexus -v /usr/local/docker/data/nexus-data:/nexus-data sonatype/nexus3

2、构建私有镜像仓库浏览器

在nexus部署成功后,在浏览器中经过http://{host_ip}:8081地址访问nexus应用,默认用户名密码为admin/admin123。安全

image.png

1)经过管理员账户登陆nexus,并进入建立为docker的镜像仓库的主页:服务器

image.png

image.png

2)在建立镜像仓库的页面中,设置镜像仓库的相关信息,包括名称、HTTP端口、是否容许匿名拉取镜像等信息。这里须要注意的是,此处的HTTP端口(此处的值为8082)很重要,后续拉取和推送进行是使用此端口进行的,而不是nexus自己对外暴露的端口。另外,若是容许设置经过匿名的方式拉取镜像。ide

这须要在Realms主页激活Docker Bearer Token Reamlm,以下图所示:工具

image.png

并对匿名方式进行设置,容许经过匿名方式访问服务器,以下图进行设置:代理

image.png

3)在客户端的/etc/docker/daemon.json文件中添加下面的内容:

在完成私有镜像仓库的设置后,因为使用的是HTTP协议,所以须要在客户端对docker进行配置。经过编译工具打开daemon.json:

# vim /etc/docker/daemon.json
在文件中添加以下的内容,告诉客户端私有镜像仓库是一个安全的仓库:
{"insecure-registries":["192.168.88.128:8082"]}

# systemctl daemon-reload
# systemctl restart docker


3、基本操做

1)登陆认证

在经过nexus完成私有镜像仓库的构建后,首先须要进行登陆认证才能进行后续的操做,私有镜像仓库登陆认证的语法和格式:docker login <nexus-hostname>:<repository-port>。假设上述的nexus部署在IP地址为192.168.88.128主机上,私有镜像的端口为8082,则经过执行以下的命令登陆私有镜像仓库:

$ docker login 192.168.88.128:8082

image.png

登陆时,须要提供用户名和密码。认证的信息会被保存在~/.docker/config.json文件,在后续与私有镜像仓库交互时就能够被重用,而不须要每次都进行登陆认证。

2)推送镜像

要共享一个镜像,能够经过将其发布到托管存储库,而后其它人员就能够经过存储库获取本身须要的镜像。在将镜像推送到存储库以前,须要对镜像进行标记。当标记图像时,可使用镜像标识符(imageId)或者镜像名称(imageName)。标识镜像的语法和格式:docker tag <imageId or imageName> <nexus-hostname>:<repository-port>/<image>:<tag>。假设这里将hello-world镜像标识为私有镜像仓库(192.168.88.128:8082)中的镜像,标识的执行命令以下:

$ docker tag hello-world 192.168.88.128:8082/hello-world

一旦镜像标识完成后,就能够经过的docker push命令将镜像推送到私有仓库中。推送镜像到私有镜像仓库的语法和格式为docker push <nexus-hostname>:<repository-port>/<image>:<tag>,经过下面的命令,将上述打完标签的镜像上传至私有镜像仓库:

$ docker push 192.168.88.128:8082/hello-world:latest

image.png

3)拉取镜像

在客户端能够经过手动拉取镜像,拉取的语法和格式:docker pull <nexus-hostname>:<repository-port>/<image>:<tag>。假设从本文构建的私有镜像仓库中拉取hello-world,执行命令以下所示:

$ docker pull 192.168.88.128:8082/hello-world

image.png

相关文章
相关标签/搜索