前言

在前面的章节中我们介绍了使用harbor来搭建docker私有镜像库,今天给大家介绍另外一个docker私有镜像库Sonatype Nexus,Nexus除了能当做私有镜像库使用,还可以当做代理库。


一、本地安装Sonatype Nexus

Nexus需要jdk8的环境,请确保本机已安装jdk8,并且只能是jdk8,当然如果你的机器本地环境不是jdk8,也有解决方案,看下面。

自动化构建平台(六)使用Sonatype Nexus搭建docker私有镜像库-LMLPHP

自动化构建平台(六)使用Sonatype Nexus搭建docker私有镜像库-LMLPHP

然后选择合适平台版本进行下载,这里我们下载Linux版本,也就是Unix archive,下载完成后,然后进行解压:

mkdir -p /opt/nexus
tar -xzvf nexus-3.64.0-04-unix.tar.gz -C /opt/nexus

如果你本机的环境是不jdk8,那么你需要去下载jdk8的开发包,然后解压的某个目录,然后修改nexus的启动文件:

vim /opt/nexus/nexus-3.64.0-04/bin/nexus

在文件最上面增加INSTALL4J_JAVA_HOME_OVERRIDE,添加一行:

INSTALL4J_JAVA_HOME_OVERRIDE=/usr/java/jdk1.8.0_77

我这里是单独配置的jdk。将目录改成你自己的目录即可

默认情况下nexus是不能用root用户启动的,当我们使用root用户启动时会报错:

WARNING: ************************************************************
WARNING: Detected execution as "root" user.  This is NOT recommended!
WARNING: ************************************************************

我们需要创建一个用户来专门运行nexus
创建用户:

useradd nexus && passwd nexus

添加一个nexus的用户并设置好密码,然后我们还有修改一下vim /etc/security/limits.conf这个文件

vim /etc/security/limits.conf

在文件末尾加上:

nexus - nofile 65536

赋予权限:

chmod -R 755 /opt/nexus/

chown -R nexus:nexus /opt/nexus/

切换用户:

su - nexus

运行nexus,有两种方式来运行,第一种是前台运行,可以查看nexus的执行情况:

/opt/nexus/nexus-3.64.0-04/bin/nexus run

在没有异常情况发生时,可以切换到后台运行:

/opt/nexus/nexus-3.64.0-04/bin/nexus start

查看nexus状态:

/opt/nexus/nexus-3.64.0-04/bin/nexus status

上面是通过命令来启动,还是稍显麻烦,下面我们把nexus做成系统服务,这样就可以很方便操作,我们在/etc/init.d/下创建一个nexus的文件:

cat > /etc/init.d/nexus << EOF
#!/bin/sh
### BEGIN INIT INFO
# Provides:          nexus
# Required-Start:    \$local_fs \$network
# Required-Stop:     \$local_fs \$network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Description:       nexus
### END INIT INFO
start() {
    echo "Starting nexus..."
    su - nexus -c "/opt/nexus/nexus-3.64.0-04/bin/nexus start"
}
stop() {
	echo "Stoping nexus..."
	su - nexus -c "/opt/nexus/nexus-3.64.0-04/bin/nexus stop"
}
restart() {
	echo "Restarting nexus..."
	su - nexus -c "/opt/nexus/nexus-3.64.0-04/bin/nexus restart"
}
status() {
	echo "Status nexus..."
	su - nexus -c "/opt/nexus/nexus-3.64.0-04/bin/nexus status"
}
reload() {
	echo "Reloading nexus..."
	su - nexus -c "/opt/nexus/nexus-3.64.0-04/bin/nexus force-reload"
}

case "\$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    status)
        status
        ;;
    reload)
        reload
        ;;
        
    *)
        echo "Usage: \$0 {start|stop|restart|status|reload}"
        exit 1
        ;;
esac
exit 0
EOF

修改执行权限:

chmod +x /etc/init.d/nexus

然后我们就可以使用这些命令了:

service nexus start
service nexus stop
service nexus restart
service nexus status
service nexus reload

至此Linux本地安装已经完成,

二、docker安装Sonatype Nexus

mkdir -p /usr/local/nexus/data
docker run -d --restart=always --privileged -u root -p 8081:8081 -v /usr/local/nexus/data:/nexus-data -v /etc/localtime:/etc/localtime --name nexus3 sonatype/nexus3:3.64.0

至此docker安装就完成了。

三、nexus配置说明

如果我们是在本地运行,修改端口的文件位置在:

vim /opt/nexus/nexus-3.64.0-04/etc/nexus-default.properties 

如下所示:

application-port=8081
application-host=0.0.0.0
nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml
nexus-context-path=/

将里面的8081修改成你要的端口就行。

如果在docker环境中,将本地和docker映射的端口修改即可:

-p 18081:8081

这样就把端口改成18081了

四、nexus登录密码

初次登录,这里都会提示默认密码文件存放的地址,默认用户:admin
我们查看密码:

cat /usr/local/nexus/data/admin.password

需要注意的是,如果是用docker环境启动,他这里是docker容器中的路径,我们把他容器数据目录挂载到了本机,在本机中绝对路径就是上面的/usr/local/nexus/data/

五、nexus配置docker私有镜像库

在浏览器访问:http://ip:8081
输入用户名、密码登录成功后
自动化构建平台(六)使用Sonatype Nexus搭建docker私有镜像库-LMLPHP

这里已经默认创建了两个仓库

下面我们来配置docker服务:

这里设置一个HTTP的端口。然后点击保存

点击保存。

六、推送镜像到私有库

我们还是已Redis镜像来进行测试

docker pull redis:5.0.7

然后登录docker 8082,如果登录有错误,请参照我上一篇文章的解决方案:
自动化构建平台(三)Linux搭建私有的docker镜像库之Harbor的安装和使用详解

docker login http://192.168.101.170:8082

输入用户名admin和密码:
自动化构建平台(六)使用Sonatype Nexus搭建docker私有镜像库-LMLPHP
docker镜像重命名

docker tag redis:5.0.7 192.168.101.170:8082/myredis:5.0.7

推送镜像

docker push 192.168.101.170:8082/myredis:5.0.7

运行结果
自动化构建平台(六)使用Sonatype Nexus搭建docker私有镜像库-LMLPHP
我们再登录后台管理,查看镜像:
自动化构建平台(六)使用Sonatype Nexus搭建docker私有镜像库-LMLPHP
说明已经推送成功

七、从私有库拉取镜像

推送成功后,我们要如何拉取呢?下面我们切换到自己电脑

docker login http://192.168.101.170:8082
docker pull 192.168.101.170:8082/myredis:5.0.7

注意这里需要加上192.168.101.170:8082,如果你有域名并做了反向代理,这里可以直接替换成你的域名,上面的登录也一样。

查看拉取结果:

5.0.7: Pulling from myredis
68ced04f60ab: Pull complete 
7ecc253967df: Pull complete 
765957bf98d4: Pull complete 
52f16772e1ca: Pull complete 
2e43ba99c3f3: Pull complete 
d95576c71392: Pull complete 
Digest: sha256:ee1d00c5250b5a886b09be2d5f9506add35dfb557f1ef37a7e4b8f0138f32956
Status: Downloaded newer image for 192.168.101.170:8082/myredis:5.0.7
192.168.101.170:8082/myredis:5.0.7

说明已经拉取成功。

八、Nexus私有库权限管理

同样Nexus也可以通过用户权限来控制相关的仓库操作。Nexus的权限模式完全采用RBAC权限模型。如何配置?请看下面。

自动化构建平台(六)使用Sonatype Nexus搭建docker私有镜像库-LMLPHP
在privileges环节就是选择操作权限,可以根据权限的描述增加适当的权限。

自动化构建平台(六)使用Sonatype Nexus搭建docker私有镜像库-LMLPHP


总结

Nexus和Harbor都能当做docker私有镜像库来使用,都是不错的工具。但是两者还是有些区别,大家可以根据各自的特点来进行选择。

1、Nexus的权限控制是针对所有的镜像,无法对单个镜像进行控制,而Harbor的权限控制比较细,能精确到某个固定的镜像。

2、Nexus可以作为镜像代理库来使用,但是镜像代理库需要更多的硬盘空间,请根据自身情况使用。

3、在部署方面,Nexus应该更具有优势,Nexus附带的组件少,而且运行环境配置要求也相对较低,在运维管理方面很有优势;而Harbor运行时依赖了多个组件,对运维和资源也要求比较高。

4、Nexus不仅仅是一个docker仓库,它支持多种私有仓库,包括maven、npm、nuget等,大家可以自行研究,如果想了解maven私有库的搭建可以参照【在Linux下搭建自己的私有maven库并部署和发布自定义jar依赖和自定义maven插件(一)搭建Sonatype Nexus私有库

03-11 08:43