使用 Docker 官方的 Registry 创建的仓库面临一些维护问题。比如某些镜像删除以后空间默认是不会回收的,需要一些命令去回收空间然后重启 Registry 程序。在企业中把内部的一些工具包放入 Nexus 中是比较常见的做法,最新版本 Nexus3.x 全面支持 Docker 的私有镜像。所以使用 Nexus3.x 一个软件来管理 Docker , Maven , Yum , PyPI 等是一个明智的选择。
1、启动 Nexus 容器
$ docker run -d --name nexus3 --restart=always \-p 8081:8081 \-p 8082:8082 \-p 8083:8083 \--mount src=nexus-data,target=/nexus-data \sonatype/nexus3
这里配置了3个端口,是为后续做准备,如果只是为了启动浏览,启动一个8081即可:
$ docker run -d --name nexus3 --restart=always \-p 8081:8081 \--mount src=nexus-data,target=/nexus-data \sonatype/nexus3

等待 3-5 分钟,如果 nexus3 容器没有异常退出,那么你可以使用浏览器打开 http://YourIP:8081 访问 Nexus 了。
第一次启动 Nexus 的默认帐号是 admin 密码在容器内部 的 /nexus-data/admin.password
登录Nexus 3 后,进行相关安全性配置
- 设定新密码

- 关闭匿名访问。启用匿名访问意味着默认情况下,用户可以在没有凭据的情况下从存储库搜索,浏览和下载组件。 请考虑对您的组织的安全隐患。禁用匿名访问应谨慎选择,因为它将需要所有用户和/或构建工具的凭据

- 完成配置
2、创建 Hosted类型 Docker 仓库
创建一个私有仓库的方法: 设置->Repositories 点击左上角 Create repository 选择 docker (hosted)
- 创建 Blog Stores

- 创建 Hosted 类型的 Docker 仓库


Storage配置:
- Name: 仓库的名称
- HTTP: 仓库单独的访问端口
- Enable Docker V1 API: 如果需要同时支持 V1 版本请勾选此项(不建议勾选)。
- Hosted -> Deployment pollcy: 请选择 Allow redeploy 否则无法上传 Docker 镜像。
在/etc/docker/daemon.json 文件中加上私有仓库的地址:
{"registry-mirrors": ["https://z1h5tgiv.mirror.aliyuncs.com"],"insecure-registries": ["192.168.22.3:8082","192.168.22.3:8083"]}
刷新配置,重启 docker:
$ systemctl daemon-reload$ systemctl restart docker.service
其它的仓库创建方法请各位自己摸索,还可以创建一个 docker (proxy) 类型的仓库链接到 DockerHub 上。再创建一个 docker (group) 类型的仓库把刚才的 hosted 与 proxy 添加在一起。主机在访问的时候默认下载私有仓库中的镜像,如果没有将链接到 DockerHub 中下载并缓存到 Nexus 中。
3、添加访问权限
菜单 Security->Realms 把 Docker Bearer Token Realm 移到右边的框中保存。
添加用户规则:菜单 Security->Roles->Create role 在 Privlleges 选项搜索 docker 把相应的规则移动到右边的框中然后保存。
添加用户:菜单 Security->Users->Create local user 在 Roles 选项中选中刚才创建的规则移动到右边的窗口保存。
登录测试:
$ docker login -u admin -p 你的密码 192.168.22.3:8082WARNING! Using --password via the CLI is insecure. Use --password-stdin.WARNING! Your password will be stored unencrypted in /root/.docker/config.json.Configure a credential helper to remove this warning. Seehttps://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded
4、创建 Proxy 类型 Docker 仓库
上面我们只是配置了docker(host),这个相当于我们的私有仓库,但是我们现在使用docker login 我们自己的仓库,如果我们需要的镜像我们仓库没有,就会很麻烦,需要重新登录到公共仓库上下载下来,再上传到我们的私有仓库,那有没有办法可以一步到位呢?
上面我们已经配置好了私有仓库的不用动,下面我们来配置代理仓库 docker(proxy):
- 创建 docker(proxy)


Proxy 配置:Docker Hub 的URL:https://registry-1.docker.io (https://registry-1.docker.io)
Storage 配置:
5、创建 Group 类型 Docker 仓库
Group类型的docker仓库,是一个聚合类型的仓库。它可以将前面我们创建的3个仓库聚合成一个URL对外提供服务,可以屏蔽后端的差异性,实现类似透明代理的功能。
- 创建 Group Docker


Storage、Group 配置:
