找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

602

积分

0

好友

76

主题
发表于 5 天前 | 查看: 29| 回复: 0

对于小规模团队或PoC测试环境,使用Docker Registry搭建本地私有镜像仓库是一种常见方案。然而,单纯通过命令行管理镜像往往不够直观。是否存在开源的UI工具来对接并管理本地的Registry及其镜像呢?

答案是肯定的。在GitHub上,曾有两个Star数约3k的相关项目:Portus和docker-registry-ui。其中,Portus已于2023年4月停止维护。因此,本文将重点介绍 docker-registry-ui。这个项目旨在为本地私有Registry提供一个简单、完整的Web用户界面,极大地方便了开发者和运维人员进行镜像的可视化管理。

Docker Registry UI 主界面截图

项目GitHub地址:https://github.com/Joxit/docker-registry-ui

docker-registry-ui的主要功能亮点包括:

  1. 直观展示和管理私有仓库中的镜像。
  2. 支持管理多个仓库。
  3. 支持批量删除镜像标签。
  4. 提供镜像检索功能。
  5. 可直接查看镜像的Dockerfile构建历史。

以下实战演练均在 Ubuntu 24.04 系统上完成,服务器IP为 192.168.56.13

1、安装与配置 Docker 环境

由于Registry和docker-registry-ui均以容器化方式运行,因此首先需要安装并配置Docker环境。

# 1)添加 Docker 的官方 GPG 密钥
sudo apt-get update
sudo apt install curl apt-transport-https ca-certificates software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 2)添加 apt 源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update

# 3)安装 Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 4)启动 Docker 服务
sudo systemctl start docker

接下来,配置Docker的日志、数据目录、镜像加速以及允许非安全HTTP访问私有仓库。

vim /etc/docker/daemon.json

将以下配置内容添加到文件中:

{
  "storage-driver": "overlay2",
  "log-opts": { # 日志大小和数量限制
    "max-file": "2",
    "max-size": "256m"
  },
  "data-root": "/data/docker", # 容器默认数据目录
  "live-restore": true, # Docker守护进程重启不影响正在运行的容器
  "insecure-registries": ["192.168.56.13:5000"], # 允许非安全访问的私有仓库地址
  "registry-mirrors": [ # 国内镜像加速源
    "https://docker.m.daocloud.io",
    "https://docker.1panel.live",
    "https://hub.rat.dev"
  ]
}

配置完成后,重启Docker服务使配置生效:
sudo systemctl restart docker

2、安装配置本地私有仓库 Registry

首先拉取并运行官方的Registry镜像。

# 拉取镜像
docker pull registry:2

# 启动本地镜像仓库容器
docker run -tid -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name local-registry registry:2

为了使Registry能与后续的UI工具(docker-registry-ui)完美配合,尤其是支持镜像删除等功能,需要修改其配置文件。

# 进入容器
docker exec -uroot -it local-registry /bin/sh

# 编辑配置文件 /etc/docker/registry/config.yml

配置文件关键部分修改如下(重点关注 deletehttp.headers 部分):

version: 0.1
log:
  fields:
    service: registry
storage:
  delete: # 启用镜像删除功能
    enabled: true
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
    # 以下配置为适配UI工具而添加,解决跨域等问题
    Access-Control-Allow-Origin: ['http://192.168.56.13:8080']
    Access-Control-Allow-Headers: ['Accept', 'Cache-Control']
    Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE']
    Access-Control-Expose-Headers: ['Docker-Content-Digest']
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

修改完成后,退出容器并重启该容器使配置生效:docker restart local-registry

至此,Docker及私有Registry已配置完成。可以通过命令查看运行状态。

Docker容器与镜像状态检查

现在,我们拉取一个测试镜像并推送到刚搭建好的私有仓库中,验证其功能。

# 从 Docker Hub 拉取 nginx 镜像
docker pull nginx

# 为镜像打上私有仓库的标签
docker tag nginx:latest 192.168.56.13:5000/nginx:mylocal

# 推送镜像至私有仓库
docker push 192.168.56.13:5000/nginx:mylocal

# 通过 Registry API 查看仓库中的镜像列表
curl -XGET http://192.168.56.13:5000/v2/_catalog
# 预期输出:{"repositories":["nginx"]}

# 查看指定镜像的标签列表
curl http://localhost:5000/v2/nginx/tags/list
# 预期输出:{"name":"nginx","tags":["mylocal"]}

镜像拉取、打标与推送操作截图

3、安装配置 docker-registry-ui

Registry运行无误后,我们来部署其图形化管理界面。

3.1 拉取 UI 镜像

docker pull joxit/docker-registry-ui:main

3.2 启动 UI 容器

通过环境变量可以灵活配置UI的各项参数。运行以下命令启动容器:

docker run -d -p 8080:80 \
--env REGISTRY_TITLE='AI Cloud Private Docker Registry' \ # 设置UI主页标题
--env REGISTRY_URL=http://192.168.56.13:5000 \ # 设置要连接的私有仓库地址
--env SINGLE_REGISTRY=true \ # 简化界面,隐藏仓库管理菜单
--env DELETE_IMAGES=true \ # 启用镜像删除功能
--env SHOW_CONTENT_DIGEST=true \ # 展示镜像摘要(Digest)
--env SHOW_CATALOG_NB_TAGS=true \ # 显示每个仓库的镜像标签数量
--env TAGLIST_PAGE_SIZE=100 \ # 设置单页展示的标签数量
--env REGISTRY_SECURED=false \ # 设置无身份验证(如启用需配置true及认证信息)
--env CATALOG_ELEMENTS_LIMIT=1000 \
--env DOCKER_REGISTRY_UI_TITLE='Docker Registry UI AI-Cloud' \ # 浏览器标签页标题
--env THEME=dark \ # 设置页面主题,可选 dark, light, auto
--name docker-registry-ui \
joxit/docker-registry-ui:main

3.3 登录UI查看与管理镜像

如果容器启动成功,在浏览器中访问 http://192.168.56.13:8080,即可看到管理界面。主页会展示之前推送到Registry的 nginx:mylocal 镜像。

Docker Registry UI 显示单个镜像

3.4 删除镜像

在UI中删除镜像非常简单直观。点击想要管理的镜像(如 nginx),进入其标签详情页。

nginx镜像标签详情页

选择要删除的标签(如 mylocal),点击删除按钮,在确认对话框中再次确认。

镜像删除确认对话框

操作完成后,可以通过命令行验证镜像是否已被成功删除。

curl -XGET http://localhost:5000/v2/_catalog
curl http://localhost:5000/v2/nginx/tags/list

验证镜像删除结果的命令行输出

3.5 查询镜像详细信息

UI提供了丰富的镜像元信息展示。在镜像详情页,可以查看镜像的创建时间、系统架构、环境变量、作者信息以及构建历史层。

镜像详细信息展示
镜像构建历史详情

3.6 查询镜像Dockerfile

在镜像的历史详情页面,你还可以直接查看到构成该镜像的每一层所对应的Dockerfile指令,这对于学习镜像构建和排查问题非常有帮助。

镜像Dockerfile构建历史查看

至此,我们完成了从零搭建私有Docker镜像仓库,并为其配置了一个功能完善的图形化管理界面的全过程。

总结

在小规模开发测试或内部环境中,使用Docker Registry搭建私有仓库是性价比很高的选择。然而,纯命令行操作对新手不够友好,也缺乏管理的直观性。本文介绍的 docker-registry-ui 这款工具,恰好弥补了这一短板。它通过与Registry的API对接,提供了镜像的图形化展示、查询、删除及深度信息查看功能,两者结合堪称“珠联璧合”,极大提升了私有镜像仓库的管理效率和体验。这套组合方案尤其适合初创团队、运维人员以及对云原生技术栈有学习需求的开发者。

希望这篇实战指南能帮助你轻松搭建起自己的可视化私有镜像仓库。如果你想探索更多运维开发或云原生领域的实战技巧,欢迎访问 云栈社区 与广大开发者交流讨论。




上一篇:快速定位Linux命令路径:whereis命令详解与实战示例
下一篇:深入解析同步、异步与并发的核心区别及常见误区
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-24 05:18 , Processed in 0.380702 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表