包含dockernexus的词条
本篇文章给大家谈谈dockernexus,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、dockerdesktop连接自maven工程代码
- 2、spring-boot 构建上传到nexus私服
- 3、nexus 配置
- 4、【nexus】Nexus Repository Manager 镜像清理的task设置
- 5、nexus搭建docker镜像仓库
- 6、【nexus】关于nexus oss 的高可用
dockerdesktop连接自maven工程代码
已经搭建好了kie-server的docker swarm集群. 没有搭建business-central是集群是因为这是个页面的可视化的开发环境 一来面向开发人员,不需要集群部署 二来他的数据是放在本地的git服务器上的. 所以每个node的数据不会统一 三来部署好了之后页面也打不开… 四来business-central是只可以有一个kie-server的远程服务器. 天生就不能集群部署,五来,搭建kie-server的集群是是不能使用 --link参数来指定对应的business-central的, 也就是说搭建的kie-server集群暂时不能指定business-central.
ok结论是 kie-server是三个node的集群, business-central不集群部署,只部署一台服务器. 而且business-central与kie-server不再进行连接. 也就是b 不指定kie-server远程服务器 . 现状暂时如此,以下是讲如此架构下的发布流程.
kie-server对外暴露了一个接口, 用于发布项目.
get请求
body:
每个node是有本地maven库的, 会根据请求的三个参数从maven本地库找到这个jar 然后部署成一个kie-server里的一个容器. 容器就是kie-server对外提供服务的一个服务器之下的一个最高的组织方式.
ok为了验证可用性 手动把jar分别放进每个node里 并分别执行cp命令将jar从服务器的临时目录copy到容器里maven本地库下的指定目录里
结果是确实发送了get命令后会部署成功. ok验证通过. 但问题也很明显. 发布过程过于手动化, 对于开发人员来说很容易造成误操作, 比如某个node遗漏了cp命令, 还有一个问题 更严重, 因为已经利用了swarm的特性 已经是负载均衡的了, 所以put请求到了哪个node是不确定的, 需要打开日志发送多次put请求 确保每个node都发布成功了. 这个操作很…很蠢
ok在上一步的基础上更进一步假设如果每个node都连接同一个远程maven库, 那就只需要将代码发布到这个远程库, 即可以达到让每个node都能接受到这个资源从而进行发布, 就不需要人工把jar copy到各个node了./opt/jboss/.m2/repository目录会自动建的, 下面有setting.xml配置文件 文件内容很有帮助,
首先setting.xml是maven的配置文件 配置了服务器在哪等等信息. 注释的大致意思是
KIE_MAVEN_REPO - Defaults to
KIE_MAVEN_REPO_USER - Defaults to admin
KIE_MAVEN_REPO_PASSWORD - Defaults to admin
文件使用环境变量来配置, 三个关绝激晌键的环并锋境变量如上.
也就是说我们创建 kie-server集群的时候如果指定了环境变量 也就可以给每个node指定他的maven服务器地址. 很nice
ok下一步要开一个maven远程服务器 ,并验证可以将本地代码install的jar报 deploy到远程maven服务器.
docker run -d -p 8001:8081 --name nexus -v /root/nexus-data:/var/nexus-data --restart=always sonatype/nexus3
第一步利用docker创建一个maven服务器的容器. docker真是越用越好用.
然后 就可以看到maven的管理页面了, 需要密码
进入容器根目录, 下面有nexux-date目录, 里面原来有个admin.password的文件. 打开里面就是admin 的密码 .因为登录后改密铅指码之后这个默认密码的文件消失了, 所以截图里没有
主要是复制下这两个的url
然后本地pc打开 IDEA, 设置 maven /user serttings file override . 然后编辑本地的setttings.xml 全文如下:
?xml version="1.0" encoding="UTF-8"?
settings xmlns=""
xmlns:xsi=""
xsi:schemaLocation=" "
pluginGroups
/pluginGroups
proxies
/proxies
servers
server
idnexus-releases/id
usernameadmin/username
password9b1f9129-0b87-460c-9435-37a754198655/password
/server
server
idnexus-snapshots/id
usernameadmin/username
password9b1f9129-0b87-460c-9435-37a754198655/password
/server
/servers
mirrors
mirror
idmaven-default-http-blocker/id
mirrorOfexternal:http:*/mirrorOf
namePseudo repository to mirror external repositories initially using HTTP./name
url;/url
blockedtrue/blocked
/mirror
/mirrors
profiles
profile
idnexus/id
properties
altSnapshotDeploymentRepository
nexus-snapshots::default::
/altSnapshotDeploymentRepository
altReleaseDeploymentRepository
nexus-releases::default::
/altReleaseDeploymentRepository
/properties
/profile
/profiles
activeProfiles
activeProfilenexus/activeProfile
/activeProfiles
/settings
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
关键信息是server和两个url.
maven的配置好了, 然后是项目代码的配置,
对项目来说 ,因为项目用的maven 的配置文件里有了profile nexus, 所以在IDEA里打开项目可以看到profiles nexus是固定选中的
打开项目文件里的 pom.xml 顶级节点下添加如下代码
distributionManagement
!--正式版本--
repository
!-- 在settings.xml中server的id--
idnexus-releases/id
url;/url
/repository
!--快照版本--
snapshotRepository
idnexus-snapshots/id
url;/url
/snapshotRepository
/distributionManagement
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ok 这样项目在执行 maven deploy命令的时候就会把install的时候生成的jar发布到远程服务器.根据版本号是否是快照 决定发布到正式还是快照的repostitory, 效果如下
这时候就可以在maven的后台管理页面看到刚deploy的jar
ok至此maven服务器和发布流程已经验证通过, 结束.
下一步是kie-server在部署集群的时候设置环境变量, 让集群中的每个node都连上maven服务器.
还有个问题没有解决, 即put发布命令是被负载均衡了的, 怎么保证每个节点都能确保发布.可能要发布的时候指定一下网络,不用ingress 发布好了之后再改成ingress ? 这要考虑下, 不过还好问题不大
[img]spring-boot 构建上传到nexus私服
需要准备
由于我们使用的时http而不是https 故需要在启动参数文件中设置
vi /etc/docker/daemon.json,将ip:8082和ip:8083 添加到 insecure-registries 参数中,由于我们的远程仓库地址为 ,不为https 故同样需要将该地址添加到insecure-registries参数中:"insecure-registries":["ip:8082","ip:8083"," "]
重启docker
systemctl daemon-reload
systemctl restart docker
docker login ip:8082
docker login ip:8083
在登录需要输入登录用户名及密码,即为你的nexus3的登录用户名及密码
验证proxy
docker pull ip:8083/redis
此docker私服仓库中时没有redis的镜像的,故nexus3会从中央仓库中去拉取山孙纤镜像,拉取成功之后,查看nexus3的proxy仓库发逗仿现已经存凯做在了redis镜像
验证hosted
tag镜像:docker tag nginx:latest ip:8082/nginx:latest
push 镜像:docker push ip:8082/nginx:latest
此时查看hosted仓库发现已经存nginx的镜像了
nexus 配置
NEXUS通过docker方式进行安装
settings.xml配置
settings xmlns=""
xmlns:xsi=""
xsi:schemaLocation=" "
localRepositoryrepository地址/localRepository
mirrors
mirror
idaaa/id
nameaaa/name
mirrorOfaaa/mirrorOf
url;/url
/mirror
!--此处需要排除掉rjyun--
mirror
idalimaven/id
mirrorOf*,!aaa/mirrorOf
这里需要注李拍意 设置成*以后 会优先走这里 需要排除掉aaa 再设置成mirror 否则其他配置无效
nameNexus aliyun/name
url;/url
/mirror
/mirrors
servers
宽扰仔 server
idaaa/id
慎汪 usernameadmin/username
passwordxxx/password
/server
/servers
activeProfiles
activeProfilenexus/activeProfile
/activeProfiles
/settings
上传jar包 需要注意的是连pom.xml一起上传 并且后缀名设置为pom 否则可能会报错
pom.xml配置
repositories
repository
idrjyun/id
namerjyun/name
url;/url
/repository
【nexus】Nexus Repository Manager 镜像清理的task设置
nexus3 docker私服在使用过程中,通过nexus3管理界面,删液颤除了一些镜像之后,其实底层的存储,并没有释放。耐世
注意:在删除多个目标后,你会发现,实际物理磁盘并没有释放出来,是因为在后台只是被标记为deletion,就好比你用delete语句删除MySQL中的条目时,磁盘空间不会释放出来一样。
Delete unused manifests and images
Compact blob store
定时清理docker私服镜像的方法
nexus3清理释放昌埋肢docker镜像的磁盘空间
nexus搭建docker镜像仓库
1 从docker拉取Nexus3镜像,这里使用的是3.30.0版本
2 创建nexus数据挂载目录
这里会宿主机目录权限问题,简单粗暴解决就是直接给我挂载的目录777权限,哈哈。要么就是在启动容器的时候给容器root权限。
3 运行nexus容器
接着重启docker 重启nexus就可以了。
等待了一段时间发现访问nexus还是没有起起来,通过 docker logs -f nexus3 看了一下日志,发现报错了,原因就是上面挂载了目录,目录的权限用户是root,nexus在容器内部中启动的时候是以nexus用户启动的,逗裤早uid 是200,操作系统root用户的uid是1000,所以必然没有写入权限,启动报错。可以通过启动时添加 --privileged=true 赋予root权限解决这个问题,但是给一个容器赋予一个root权限是有点不安全。网上有些博客通过 chown 200 -R /opt/nexus-data 我没试成功,只能先这么搞了。
PS:这里给了两个山雀端口,8081和8082,8081是nexus的默认端口,8082预留给docker私有仓库使用。
4 创建私有docker仓库
4.1 访问界面并登录
账号是admin,密码记录在挂载目录下的/admin.password文件里面,在登陆一波。
4.2 创建仓库
4.3 安全设置
4.4 测试
因为我们的仓库开放的是http的端口,而docker要纯橡求使用的是https,所以这里还要添加一下信任仓库。
再次登录成功了。
4.5 制作镜像并向私有仓库推送镜像
推送成功后到nexus页面查询我们是否推送成功。
可以看到已经看到了我们用于测试的nginx镜像了。
额外用一张图补充 docker tag 命令的用法
【nexus】关于nexus oss 的高可用
Sonatype当前不支持Nexus负载平衡,除非将Nexus实例绝芹中置并山于启用 智能代理 或通过 更新功能 的两个实例之前。
关于nexus作为docker镜像仓库的高可用设置,网上nexus+keepalived+rsync的方式挺扯的,官方开源版本默认又不支持高可用,那么通过nginx代理不失为一个办法,只是需要将镜像推两遍,每个仓库推一遍。
nexus01 192.168.1.105
nexus02 首模 192.168.1.106
nginx_vip 192.168.1.108(nexus.example.com)
装有docker的客户端 192.168.1.107
在nexus01服务器上安装nexus,生成keystore.jks
# keytool \
-genkeypair \
-keystore keystore.jks \
-alias Test_nexus \
-keypass Nexus@123 \
-storepass Nexus@123 \
-keyalg RSA \
-keysize 2048 \
-validity 5000 \
-dname "CN=*.example.com,OU=Test,O=Test,L=ShenZhen,ST=GuangDong,C=CN" \
-ext "SAN=DNS: nexus.example.com ,IP:192.168.1.105" \
-ext "BC=ca:true"
在nexus02服务器上安装nexus,生成keystore.jks
# keytool \
-genkeypair \
-keystore keystore.jks \
-alias Test_nexus \
-keypass Nexus@123 \
-storepass Nexus@123 \
-keyalg RSA \
-keysize 2048 \
-validity 5000 \
-dname "CN=*.example.com,OU=Test,O=Test,L=ShenZhen,ST=GuangDong,C=CN" \
-ext "SAN=DNS: nexus.example.com ,IP:192.168.1.106" \
-ext "BC=ca:true"
# vim /etc/hosts
#################################
192.168.1.108 nexus.example.com
#################################
关闭selinux
# sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# setenforce 0
nignx监听vip设置
# echo "1" /proc/sys/net/ipv4/ip_nonlocal_bind
# echo 'net.ipv4.ip_nonlocal_bind = 1' /etc/sysctl.conf
# sysctl -p
生成nginx自签名证书
# openssl req -x509 -nodes \
-days 3650 \
-newkey rsa:2048 \
-subj "/C=CN/ST=Guangdong Province/L=Shenzhen/O=Test/OU=Test/CN=nexus.example.com" \
-keyout /etc/nginx/ssl/nginx.key \
-out /etc/nginx/ssl/nginx.crt
# yum -y install nginx
# vim /etc/nginx/nginx.conf
#############################################
# For more information on configuration, see:
# * Official English Documentation:
# * Official Russian Documentation:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
client_max_body_size 500M;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See
# for more information.
include /etc/nginx/conf.d/*.conf;
upstream nexus {
server 192.168.1.105:10086 max_fails=1 fail_timeout=180s;
server 192.168.1.106:10086 max_fails=1 fail_timeout=180s;
}
server {
listen 192.168.1.108:10086 ssl;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
location / {
proxy_pass ;
#Proxy Settings
proxy_connect_timeout 3;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
}
}
}
#############################################
根据 include /etc/nginx/conf.d/*.conf 我们也可以将nexus的代理配置写在自配置文件中:
# vim /etc/nginx/conf.d/nexus.conf
###################################################
upstream nexus {
server 192.168.1.105:10086 max_fails=1 fail_timeout=180s;
server 192.168.1.106:10086 max_fails=1 fail_timeout=180s;
}
server{
listen192.168.1.108:10086 ssl;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
location / {
proxy_pass ;
#Proxy Settings
proxy_connect_timeout 3;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
}
}
###########################################################
# keytool -printcert -sslserver nexus.example.com:2020 -rfc /etc/pki/ca-trust/source/anchors/nexus.crt
注:此处2020为创建的nexus的一个仓库端口
# cat /etc/pki/ca-trust/source/anchors/nexus.crt
# update-ca-trust
# systemctl restart docker
# docker login nexus.example.com:2020 -u test -p "Test@123"
# cat /root/.docker/config.json
从输出可知,docker节点获取的就是nginx的公钥。
负载均衡Nexus工件存储库
High Availability Clustering (Legacy)
关于dockernexus和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。