使用nexus3搭建自己的制品服务器
需求
云原生开发,有个新的需求,就是docker制品服务器,对于私域的开发,公有云的服务器不合适,只能自己搭建了。
所以记录一下搭建一个docker镜像服务器的过程,完成的功能如下:
- 存储私有的docker制品,所有有上传下载功能(pull,push)
- 代理开源的共有源镜像(dockerhub)
- 读写权限分开
使用nexus3大家私服过程
nexus3是目前最全面的私服软件了,支持apt、npm、docker、cargo、go、maven、composer……
这次只使用其docker功能。
使用docker搭建nexus3,并使用caddy作为代理:
nexus3的配置:
services:nexus3:image:sonatype/nexus3:latestcontainer_name:nexus3environment:-TZ=Asia/Shanghai-INSTALL4J_ADD_VM_PARAMS="-Xms2703m-Xmx4G-XX:MaxDirectMemorySize=2703m-Djava.util.prefs.userRoot=/userroot"-NEXUS_CONTEXT=nexusvolumes:-./data:/nexus-data-./userroot:/userrootrestart:alwaysnetworks:default:external:trueenable_ipv6:falsename:netproxycaddy的配置:
services:caddy:image:caddy:2restart:unless-stoppedcontainer_name:caddycap_add:-NET_ADMINenvironment:-TZ=Asia/Shanghaiports:-"80:80"-"8080:8080"-"443:443"-"443:443/udp"-"1443:1443"-"1443:1443/udp"volumes:-$PWD/conf:/etc/caddy-$PWD/site:/srv-$PWD/config:/config-$PWD/data:/datanetworks:-netproxynetworks:netproxy:name:netproxydriver:bridgecaddy配置文件:
{email Little-baby@163.com acme_ca https://acme.zerossl.com/v2/DV90}nexus.aaa.bbb{redir / /nexus 301 reverse_proxy nexus3:8081encode gzip header Cache-Control "public,max-age=3600" header{Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" X-Content-Type-Options "nosniff" X-XSS-Protection "1; mode=block"}}docker.aaa.bbb:1443{reverse_proxy nexus3:8082}docker.aaa.bbb{reverse_proxy nexus3:8084}搭建支持上传下载的docker私服
nexus3第一次启动后,需要修改密码,如下图:
修改密码后,后续会提示是否开通匿名访问,关闭。
新建一个host的docker repository
目录: settings->repository->create repository
新建一个支持上传下载的角色和用户
- 新建角色
并且赋权刚刚创建的host仓库给这个角色。
- 新建用户
新建用户,并且赋角色
- security realms
安全配置:
验证读写
# docker 登录dockerlogin docker.aaa.bbb:1443-udwrite# 测试上传dockertag caddy:2 docker.aaa.bbb:1443/myimage:2dockerpush docker.aaa.bbb:1443/myimage:2上传后就可以看到上传的镜像:
搭建dockerhub 代理
代理dockerhub:
修改端口、索引:
设置清理措施:
代理镜像位于dockerhub,代理服务器只需要缓存,并不需要长久存储,指定一个释放策略可以减少服务器硬盘占用。
创建清理策略:
给代理仓库加载清理策略:
搭建融合镜像
仓库组,用来合并多个hosted/proxy仓库,即将私服和公开的hub代理,合并为一个,方便使用:
设置合并的仓库,并设置顺序,host在前,代理在后:
新建一个新只读角色、只读用户,赋权限,所有仓库的只读权限:
角色:
用户:
权限:
测试
- 拉取一个私服里面的镜像
- 拉取一个dockerhub里面的镜像
# 登录dockerlogin docker.aaa.bbb-udread# 拉取私服的镜像dockerrmi docker.aaa.bbb/myimage:2# 拉取dockerhub的镜像dockerpull docker.aaa.bbb/alpine查看,dockerhu的也会被缓存下来:
学习小结:
至此,一个可用的权限分离的docker私服就实现了。nexus3一共有4个服务端口:
8081:可以通过http访问nexus应用
8082:docker(hosted)私有仓库,可以pull和push
8083:docker(proxy) 代理dockerhub,只能pull
8084:docker(group) 私有仓库和代理的组,只能pull
nexus3还有很多的私服功能,下次再开发_
微信公众号:
使用nexus3搭建自己的制品服务器