CICD实战之Nexus制品库的介绍与安装

目的

学习 Nexus 制品库的介绍与安装

介绍

在前面我们写到,制品库是承接 CI 构建后的产出制品的仓库,具有版本管理,历史管理,权限校验等功能。

在这里,我们选用 Nexus3 作为制品库。

正式开始

拉取镜像

1
docker pull sonatype/nexus3

image

启动容器

新建一个名为 nexus 的文件夹,方便我们存放 Nexus 相关数据,并赋予权限。

1
mkdir /home/nexus && chown -R 200 /home/nexus

image

创建容器

1
2
3
4
5
docker run -d -p 8081:8081 -p 8082:8082 \
--name nexus \
-v /home/nexus:/nexus-data \
--restart always \
sonatype/nexus3

image

  • Nexus 主服务端口,我们设置为 8081,;但是还需要新分配一个端口为服务端口,这里采用的是 8082

防火墙

将对应端口添加到防火墙

1
2
3
firewall-cmd --zone=public --add-port=8081/tcp --permanent
firewall-cmd --zone=public --add-port=8082/tcp --permanent
systemctl reload firewalld

image

访问 Nexus

打开浏览器地址栏,访问 Nexus 的服务地址,这里是 ip:8001。启动时间比较长,可以使用docker logs -f nexus查看日志,如果显示以下文字Started Sonatype Nexus OSS 3.25.1-04就代表成功

image

配置 Nexus

我们访问ip:8001就可以看到界面了。

image

登录

我们可以使用默认账号:admin登录,默认的密码在cat /home/nexus/admin.password可以查看。

注意不包含#号

image

当我们初次进入之后会让我们设置一下初始密码,和登录的权限。

匿名访问性

设置密码之后需要设置访问性,我们在任何没有登录的情况下,拉取(推送)制品到制品库,都算匿名访问。,在实际生产中是不安全的,我们测试可以开启。

image

创建一个 Docker 私服

点击设置,选择左侧菜单中的 Repositories ,点击 Create repository

image

使用搜索 docker 可以快速定位

image

制品库的类型

  • proxy: 此类型制品库原则上 “只下载,不允许用户推送”。可以理解为缓存外网制品的制品库。例如,我们在拉取 nginx 镜像时,如果通过 proxy 类型的制品库,则它会去创建时配置好的外网 docker 镜像源拉取(有点像 cnpm)到自己的制品库,然后给你。第二次拉取,则不会下载。起到 缓存 的作用。
  • hosted:此类型制品库和 proxy 相反,原则上 只允许用户推送,不允许缓存 。这是私有库的核心,只存放自己的私有镜像或制品。
  • group:此类型制品库用作以上两种类型的 **集合 **,将上面两个库集合为一个使用。

这里我们采用 hosted 类型,点击创建会看到一些输入框,这里做简单的解释。

image

同时我们还要设置一下权限,在 Security-Realms 的 Docker Bearer Token Realm 选择到右边的激活状态。

image

小试牛刀-登录

安装至此,我们在另一台机器上试一下。

在这里,我的架构是两台虚拟机,一台是 gitlab 和 jenkins,一台是 nginx 和 Nexus。所以,我们就在 gitlab 的机器上尝试。

配置文件

我们在 gitlab 配置文件,vim /etc/docker/daemon.json

image

1
2
3
4
"insecure-registries" : [
"192.168.182.4:8082"
]

最后记得使用systemctl restart docker重启一下
注意这里是 json 格式,格式不能错

登录

登录一下。从图中可以看出。初次登录需要输入账号密码,后续登录就不需要了。

1
docker login 服务IP:端口

image

小试牛刀-推送镜像到制品库

我们可以使用 docker push 推送镜像到私服上面。

docker 在推送一个镜像时,镜像的 Tag (名称:版本号) 必须开头带着镜像库的地址,才可以推送。例如下面两个镜像:
😡 local/jenkins 不能推送
😃 192.168.182.4:8082/local/jenkins 可以推送。

制作镜像

1.制作一份带镜像库地址的镜像:这个可以做,但是开销太大,需要走一遍制作流程

2.使用 docker tag 命令给已有的镜像打个标签:推荐使用,会将已有的镜像归位某个镜像库内。

image

1
docker tag 28c624ccaacf    192.168.182.4:8082/local/jenkins

image

推送

1
docker push 192.168.182.4:8082/local/jenkins

image

在仓库可以看到上传的

image

结语

我们在这部分实现了 docker 私服的搭建和 push,接下来我们将构建代码并且推送到私服。敬请期待吧!