一、引言
为了安全,我们常常需要将Docker镜像push到私有的仓库,但是Docker Registry不能直观的浏览管理镜像,非常不便利,给 Docker Registry 配置 Docker Registry UI这样的图形化操作工具可以显著提高 Docker Registry 的管理和使用效率。
可是由于版本的更迭,在部署Docker Registry UI时踩坑踩的我头大如斗,功夫不负有心人,终于试出了能用的配置,下面我从踩的坑到最终配置和测试带大家简单看看。
二、雷区
(一)2.0.0以前,static版本已经弃用
很多网上的教程都是教我们配置tag为static或2.0.0以前的版本,我第一次部署的为static版,页面右下角弹出了条json说分页参数=100000,打开过滤器也是不出意外的发现请求出错,显示不了我传进来的镜像。
我试着改了这个请求参数n直接发起请求,有响应但都为空,我想可能不是我电脑的问题,这版本大概真被废弃了,于是我又看了页面顶部的提示,大概是说更新到2.0.0以上的版本或者用joxit/docker-registry-ui1.5-static,这时候我又做出了错误的选择(0.o),我决定贯彻初衷,用老东西,于是我又一次回到了这个页面。
接下来我不打算相信这上面的提醒了,自己直接去拉取最新版,这又是一个错误的决定。
(二)配置文件参数与版本不对应,且无法跨域
在我更换了最新版后,信心满满刷新,新的问题又来了😅😅😅
这次再进入,提醒我们检查连接和注册表标头(与CORS“跨域资源共享”有关),一开始确实是摸不着头脑,没思路只能去看看日志
服务是打开了,又检查了一下网络和端口也没什么问题,这下基本确定是哪里配置出问题了
于是我开始按照各种非官方资料不停修改docker compose文件,切换各种版本,当我再次回到这个骗了我一次的页面,抱着试一试的心态点了顶部链接
于是我看到了一系列新的参数,是的,我之前用的可太老了😅
接下来,一边查资料,一边看官方文档,终于迎来了曙光。
三、问题解决
在一切开始之前我们还有个小配置要做,我们的私服采用的是http协议,默认不被Docker信任,所以需要做一个配置Docker信任地址
# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容:ip要改成成自己的宿主机地址如192.168.238.10,别弄错了
"insecure-registries":["http://ip:8080"]
# 重加载
systemctl daemon-reload
# 重启docker
systemctl restart docker
1.dockercompose文件创建及修改
创建有两种方式:
直接通过shell找到指定目录新建文件或者用bash命令,下面演示一下命令创建
#切到这个目录下,没有的话在tmp目录下执行下一条
cd /tmp/registry-ui
#在tmp目录下新建目录,再执行下一条
mkdir registry-ui
#在registry-ui目录下新建文件docker-compose.yml
cd registry-ui
touch docker-compose.yml
#修改docker-compose.yml
vi docker-compose.yml
2.编写docker-compose文件
docker-compose.yml内容如下,具体含义可以去看看
Migrating from 1.x to 2.x · Joxit/docker-registry-ui Wiki
version: '3.8'
services:
registry-ui:
image: joxit/docker-registry-ui:main
restart: always
ports:
- 8080:80
environment:
- SINGLE_REGISTRY=true
- REGISTRY_TITLE=Docker Registry UI
- DELETE_IMAGES=true
- SHOW_CONTENT_DIGEST=true
- NGINX_PROXY_PASS_URL=http://registry-server:5000
- SHOW_CATALOG_NB_TAGS=true
- CATALOG_MIN_BRANCHES=1
- CATALOG_MAX_BRANCHES=1
- TAGLIST_PAGE_SIZE=100
- REGISTRY_SECURED=false
- CATALOG_ELEMENTS_LIMIT=1000
container_name: registry-ui
registry-server:
image: registry:2.8.2
restart: always
environment:
REGISTRY_HTTP_HEADERS_Access-Control-Allow-Origin: '[http://registry.example.com]'
REGISTRY_HTTP_HEADERS_Access-Control-Allow-Methods: '[HEAD,GET,OPTIONS,DELETE]'
REGISTRY_HTTP_HEADERS_Access-Control-Allow-Credentials: '[true]'
REGISTRY_HTTP_HEADERS_Access-Control-Allow-Headers: '[Authorization,Accept,Cache-Control]'
REGISTRY_HTTP_HEADERS_Access-Control-Expose-Headers: '[Docker-Content-Digest]'
REGISTRY_STORAGE_DELETE_ENABLED: 'true'
volumes:
- ./registry/data:/var/lib/registry
container_name: registry-server
随后在registry-ui目录下执行
#创建并开启容器
docker compose up -ddocker compose up -d
检查一下容器开没开
没什么问题就可以去浏览器检查一下
3.上传拉取检验
随便选一个你本地的镜像tag之后push,以joxit/docker-registry-ui:1.5-static为例
#docker tag 后面这是镜像的REPOSITORY:TAG
docker tag joxit/docker-registry-ui:1.5-static 192.168.136.128:8080/ui:1.0
#完成后可以再去看一下images多了一个192.168.136.128:8080/ui
docker images
#上传到私服仓库
docker push 192.168.136.128:8080/ui:1.0
成功上传了,可以通过页面直观的管理和操作,下面拉取感兴趣可以看看
我们把本地的192.168.136.128:8080/ui镜像删掉,joxit/docker-registry-ui:1.5-static也删掉
#删除本地
docker rmi 192.168.136.128:8080/ui:1.0 joxit/docker-registry-ui:1.5-static
#检查一下现在的images
docker images
#仓库拉取 可以直接从UI复制命令
docker pull 192.168.136.128:8080/ui:1.0
#检查一下现在的images
docker images
好了,希望本次分享对你有帮助。😁