文章总结: 本文详细介绍使用Nexus3搭建私有Docker制品服务器的全过程,包括通过Docker部署Nexus3和Caddy代理、配置支持上传下载的hosted仓库、设置DockerHub代理仓库、创建合并仓库组实现权限分离。关键步骤涵盖仓库创建、角色权限分配、清理策略设置及读写验证,最终实现具备私有存储、公有镜像代理和读写权限控制的一体化制品管理方案。 综合评分: 82 文章分类: 安全工具,云安全,应用安全,安全建设,解决方案
使用nexus3搭建自己的制品服务器
原创
弈秋 弈秋
一只岸上的鱼
2025年12月16日 16:48 江苏
在小说阅读器读本章
去阅读
使用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:latest container_name: nexus3 environment: - TZ=Asia/Shanghai - INSTALL4J_ADD_VM_PARAMS="-Xms2703m -Xmx4G -XX:MaxDirectMemorySize=2703m -Djava.util.prefs.userRoot=/userroot" - NEXUS_CONTEXT=nexus volumes: - ./data:/nexus-data - ./userroot:/userroot restart: alwaysnetworks: default: external: true enable_ipv6: false name: netproxy
caddy的配置:
services: caddy: image: caddy:2 restart: unless-stopped container_name: caddy cap_add: - NET_ADMIN environment: - TZ=Asia/Shanghai ports: - "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:/data networks: - netproxynetworks: netproxy: name: netproxy driver: bridge
caddy配置文件:
{ email [email protected] acme_ca https://acme.zerossl.com/v2/DV90}nexus.aaa.bbb { redir / /nexus 301 reverse_proxy nexus3:8081 encode 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 登录docker login docker.aaa.bbb:1443 -u dwrite
测试上传docker tag caddy:2 docker.aaa.bbb:1443/myimage:2docker push docker.aaa.bbb:1443/myimage:2
测试:

上传后就可以看到上传的镜像:

###
### 搭建dockerhub 代理
代理dockerhub:

修改端口、索引:

####
####
#### 设置清理措施:
代理镜像位于dockerhub,代理服务器只需要缓存,并不需要长久存储,指定一个释放策略可以减少服务器硬盘占用。
创建清理策略:

给代理仓库加载清理策略:

###
###
### 搭建融合镜像
仓库组,用来合并多个hosted/proxy仓库,即将私服和公开的hub代理,合并为一个,方便使用:

设置合并的仓库,并设置顺序,host在前,代理在后:

新建一个新只读角色、只读用户,赋权限,所有仓库的只读权限:
角色:

用户:

权限:

#### 测试
1. 拉取一个私服里面的镜像
2. 拉取一个dockerhub里面的镜像
登录docker login docker.aaa.bbb -u dread
拉取私服的镜像docker rmi docker.aaa.bbb/myimage:2
拉取dockerhub的镜像docker pull docker.aaa.bbb/alpine
测试: “`
查看,dockerhu的也会被缓存下来:
#
学习小结:
至此,一个可用的权限分离的docker私服就实现了。nexus3一共有4个服务端口:
8081:nexus应用 8082:docker(hosted)私有仓库,可以pull和push 8083:docker(proxy) 代理dockerhub,只能pull 8084:docker(group) 私有仓库和代理的组,只能pull
nexus3还有很多的私服功能,下次再开发^_^
#
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:一只岸上的鱼 弈秋 弈秋《使用nexus3搭建自己的制品服务器》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论