文章目录
前言
在前面的章节中我们介绍了使用harbor来搭建docker私有镜像库,今天给大家介绍另外一个docker私有镜像库Sonatype Nexus,Nexus除了能当做私有镜像库使用,还可以当做代理库。
一、本地安装Sonatype Nexus
Nexus需要jdk8的环境,请确保本机已安装jdk8,并且只能是jdk8,当然如果你的机器本地环境不是jdk8,也有解决方案,看下面。
然后选择合适平台版本进行下载,这里我们下载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
输入用户名、密码登录成功后
这里已经默认创建了两个仓库
下面我们来配置docker服务:
这里设置一个HTTP的端口。然后点击保存
点击保存。
六、推送镜像到私有库
我们还是已Redis镜像来进行测试
docker pull redis:5.0.7
然后登录docker 8082,如果登录有错误,请参照我上一篇文章的解决方案:
【自动化构建平台(三)Linux搭建私有的docker镜像库之Harbor的安装和使用详解】
docker login http://192.168.101.170:8082
输入用户名admin和密码:
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
运行结果
我们再登录后台管理,查看镜像:
说明已经推送成功
七、从私有库拉取镜像
推送成功后,我们要如何拉取呢?下面我们切换到自己电脑
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权限模型。如何配置?请看下面。
在privileges环节就是选择操作权限,可以根据权限的描述增加适当的权限。
总结
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私有库】