使用nexus3搭建自己的制品服务器
使用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: always
networks:
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:
- netproxy
networks:
netproxy:
name: netproxy
driver: bridge
caddy配置文件:
{
email Little-baby@163.com
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:2
docker push docker.aaa.bbb:1443/myimage:2

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

搭建dockerhub 代理
代理dockerhub:

修改端口、索引:

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

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

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

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

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

用户:

权限:

测试
- 拉取一个私服里面的镜像
- 拉取一个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:可以通过http访问nexus应用
8082:docker(hosted)私有仓库,可以pull和push
8083:docker(proxy) 代理dockerhub,只能pull
8084:docker(group) 私有仓库和代理的组,只能pull
nexus3还有很多的私服功能,下次再开发_
微信公众号:
使用nexus3搭建自己的制品服务器











