Docker Registry以及Docker-Registry-UI部署过程

 更新时间:2026年03月18日 09:04:51   作者:凭X而动  
这篇文章主要介绍了Docker Registry以及Docker-Registry-UI部署过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

前言

部署Docker Registry之前先部署Docker

参考Docker、Docker Compose部署

Docker-Registry-UI(Registry管理界面)github项目地址:https://github.com/Joxit/docker-registry-ui

一、下载镜像并启动

# 注意:V3和V2版本对应的配置文件路径不一致 
# 下载最新版本镜像(目前是V3版本)
docker pull registry
# 下载V2版本镜像(2.8.3版本)
docker pull registry:2

# 下载Registry管理界面镜像(不需要界面则不需要下载该镜像)
docker pull joxit/docker-registry-ui:main

# 创建数据目录
mkdir /opt/registry/data

# 如果需要用户名密码访问,需要执行以下命令
# 安装 apache2-utils 来获取 htpasswd 工具
yum install httpd-tools
# 创建用户名密码目录
mkdir /opt/registry/auth
# 创建用户密码文件,username和password替换实际的用户名和密码
htpasswd -Bbn username password > /opt/registry/auth/htpasswd

1.1 docker快速启动

# 启动registry
docker run -d -p 5000:5000 \
--name=registry \
--restart=always \
-v /opt/registry/data:/var/lib/registry \
# 如果开启了用户名和密码访问,需求如下配置
-v /opt/registry/auth:/auth \
# 启用删除功能(V3版本配置文件默认开启,可以不需要配置;V2版本需要删除功能就需要开启,或者修改配置文件开启)
-e REGISTRY_STORAGE_DELETE_ENABLED=true \
# 如果开启了用户名和密码访问,需求如下配置
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_AUTH_HTPASSWD_REALM='Registry Realm' \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
# 如果需要启动Registry管理界面,需要如下配置
-e REGISTRY_HTTP_HEADERS_Access-Control-Allow-Origin='[http://192.168.1.114:5001]' \
-e REGISTRY_HTTP_HEADERS_Access-Control-Allow-Methods='[HEAD,GET,OPTIONS,DELETE]' \
-e REGISTRY_HTTP_HEADERS_Access-Control-Allow-Credentials='[true]' \
-e REGISTRY_HTTP_HEADERS_Access-Control-Allow-Headers='[Authorization,Accept,Cache-Control]' \
-e REGISTRY_HTTP_HEADERS_Access-Control-Expose-Headers='[Docker-Content-Digest]' \
registry

# 启动Registry管理界面
docker run -d -p 5001:80 \
--name registry-ui \
--restart=always \
-e SINGLE_REGISTRY=true \
-e REGISTRY_TITLE='Docker Registry UI' \
-e REGISTRY_URL=http://192.168.1.114:5000 \
-e DELETE_IMAGES=true \
-e SHOW_CONTENT_DIGEST=true \
-e SHOW_CATALOG_NB_TAGS=true \
-e TAGLIST_PAGE_SIZE=100 \
-e CATALOG_ELEMENTS_LIMIT=1000 \
-e REGISTRY_SECURED=false \
joxit/docker-registry-ui:main

·SINGLE_REGISTRY=true # true:UI只连接一个Docker Registry;false:可以配置多个Registry
·REGISTRY_TITLE='Docker Registry UI' # UI标题
·REGISTRY_URL=http://192.168.1.114:5000 # Docker Registry 的地址
·DELETE_IMAGES=true # 允许用户在UI中删除镜像
·SHOW_CONTENT_DIGEST=true # 在UI中显示内容摘要(digest)
·SHOW_CATALOG_NB_TAGS=true # 在UI中显示每个镜像的标签数量
·TAGLIST_PAGE_SIZE=100 # 设置标签列表的页面大小为100,控制每页显示的标签数量
·CATALOG_ELEMENTS_LIMIT=1000 # 设置目录元素的限制为1000,控制在UI中显示的最大元素数量
·REGISTRY_SECURED=false # false:Docker Registry不使用HTTPS;true:Registry使用HTTPS

1.2 docker-compose启动

# 创建 docker-compose.yml
cd /opt/registry
vim docker-compose.yml
version: '3.8'
services:
  registry:
    image: registry
    container_name: registry
    restart: always
    ports:
      - "5000:5000"
    volumes:
      - /opt/registry/data:/var/lib/registry
      # 如果开启了用户名和密码访问,需求如下配置
      - /opt/registry/auth:/auth
    environment:
      # 启用删除功能(V3版本配置文件默认开启,可以不需要配置;V2版本需要删除功能就需要开启,或者修改配置文件开启)
      REGISTRY_STORAGE_DELETE_ENABLED: true
      # 如果开启了用户名和密码访问,需求如下配置
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: 'Registry Realm'
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
      # 如果需要启动Registry管理界面,需要如下配置
      REGISTRY_HTTP_HEADERS_Access-Control-Allow-Origin: '[http://192.168.1.114:5001]'
      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管理界面
  registry-ui:
    image: joxit/docker-registry-ui:main
    container_name: registry-ui
    restart: always
    ports:
      - 5001:80
    environment:
      # true:UI只连接一个Docker Registry;false:可以配置多个Registry
      - SINGLE_REGISTRY=true
      # UI标题
      - REGISTRY_TITLE=Docker Registry UI
      # Docker Registry 的地址
      - REGISTRY_URL=http://192.168.1.114:5000
      # 允许用户在UI中删除镜像+
      - DELETE_IMAGES=true
      # 在UI中显示内容摘要(digest)
      - SHOW_CONTENT_DIGEST=true
      # 在UI中显示每个镜像的标签数量
      - SHOW_CATALOG_NB_TAGS=true
      # 设置标签列表的页面大小为100,控制每页显示的标签数量
      - TAGLIST_PAGE_SIZE=100
      # 设置目录元素的限制为1000,控制在UI中显示的最大元素数量
      - CATALOG_ELEMENTS_LIMIT=1000
      # false:Docker Registry不使用HTTPS;true:Registry使用HTTPS
      - REGISTRY_SECURED=false      

# 启动服务
docker-compose up -d

二、查看registry版本

# 查看registry版本:docker exec -it <container-name> registry --version
docker exec -it registry registry --version
# V3版本输出:registry github.com/distribution/distribution/v3 3.0.0
# V2版本输出:registry github.com/docker/distribution 2.8.3

三、上传镜像到registry

vim /etc/docker/daemon.json
# 添加安全访问权限
{
  "insecure-registries":["http://192.168.1.114:5000"]
}

# 重启Docker
systemctl restart docker

# 登录registry仓库
docker login 192.168.1.114:5000

# docker下载nginx镜像并上传到registry
docker pull nginx
docker tag nginx:latest 192.168.1.114:5000/nginx:latest
docker push 192.168.1.114:5000/nginx:latest

# 查看 repository 列表
curl http://192.168.1.114:5000/v2/_catalog
# 需要用户名密码访问使用如下命令
curl -u your-username:your-password http://192.168.1.114:5000/v2/_catalog

# 查看镜像 tag 列表:http://ip:5000/v2/<image_name>/tags/list
curl http://192.168.1.114:5000/v2/nginx/tags/list
# 需要用户名密码访问使用如下命令
curl -u your-username:your-password http://192.168.1.114:5000/v2/nginx/tags/list

四、删除镜像

注:通过Docker-Registry-UI页面删除镜像,也需要手动进行垃圾回收释放存储空间

4.1 配置registry允许删除镜像

如果registry启动时添加了环境变量:启用删除功能(REGISTRY_STORAGE_DELETE_ENABLED='true'),则忽略此步骤

# 查找配置文件
# V3版本配置文件路径:/etc/distribution/config.yml
# V2版本配置文件路径:/etc/docker/registry/config.yml
docker exec -it registry find / -name "config.yml"

# 进入容器内部
docker exec -it registry /bin/sh

# V3版本
# 查看storage.delete.enabled: true是否配置(默认已配置)
cat /etc/distribution/config.yml
version: 0.1
log:
  level: debug
  fields:
    service: registry
    environment: development
storage:
    delete:
      enabled: true
    cache:
        blobdescriptor: inmemory
    filesystem:
        rootdirectory: /var/lib/registry
    tag:
      concurrencylimit: 5
http:
    addr: :5000
    debug:
        addr: :5001
        prometheus:
            enabled: true
            path: /metrics
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

# V2版本
# 添加storage.delete.enabled: true(默认未配置)
vi /etc/docker/registry/config.yml
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]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

# 重启registry容器
docker restart registry
# 如果使用docker compose启动,则使用docker-compose restart重启
#docker-compose restart

4.2 删除镜像

4.2.1 命令删除

# 查询要删除镜像tag:http://192.168.1.114:5000/v2/<image_name>/tags/list
curl http://192.168.1.114:5000/v2/nginx/tags/list

# 查询镜像的Digest:GET http://ip:5000/v2/<image_name>/manifests/<tag>
# 必须在 Header 中指定 Accept 为 v2 格式,否则可能获取到错误的 Digest。
curl --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -I -X GET http://192.168.1.114:5000/v2/nginx/manifests/latest
# 输出如下:
HTTP/1.1 200 OK
Content-Length: 1778
Content-Type: application/vnd.docker.distribution.manifest.v2+json
Docker-Content-Digest: sha256:a6dd519f4cc2f69a8f049f35b56aec2e30b7ddfedee12976c9e289c07b421804
Docker-Distribution-Api-Version: registry/2.0
Etag: "sha256:a6dd519f4cc2f69a8f049f35b56aec2e30b7ddfedee12976c9e289c07b421804"
Date: Mon, 26 Jan 2026 17:24:49 GMT

# 调用registry接口删除镜像
curl -I -X DELETE http://192.168.1.114:5000/v2/nginx/manifests/sha256:a6dd519f4cc2f69a8f049f35b56aec2e30b7ddfedee12976c9e289c07b421804
# 输出如下:
HTTP/1.1 202 Accepted
Docker-Distribution-Api-Version: registry/2.0
Date: Tue, 27 Jan 2026 09:35:07 GMT
Content-Length: 0

# 执行垃圾回收,释放存储空间:docker exec -it <镜像仓库容器ID/名称> /bin/registry garbage-collect <镜像仓库配置文件>
# V3版本
docker exec -it registry bin/registry garbage-collect /etc/distribution/config.yml
# V2版本
docker exec -it registry bin/registry garbage-collect /etc/docker/registry/config.yml

4.2.2 Registry管理界面删除

# 执行垃圾回收,释放存储空间:docker exec -it <镜像仓库容器ID/名称> /bin/registry garbage-collect <镜像仓库配置文件>
# V3版本
docker exec -it registry bin/registry garbage-collect /etc/distribution/config.yml
# V2版本
docker exec -it registry bin/registry garbage-collect /etc/docker/registry/config.yml

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 浅谈关于Docker容器互联的初步实践

    浅谈关于Docker容器互联的初步实践

    这篇文章主要介绍了浅谈关于Docker容器互联的初步实践,本文介绍了使用网桥(bridge)来对容器进行互联,非常具有实用价值,需要的朋友可以参考下
    2018-10-10
  • docker images本地迁移的实现

    docker images本地迁移的实现

    这篇文章主要介绍了docker images本地迁移的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • docker cp 拷贝文件 和 进入容器的操作

    docker cp 拷贝文件 和 进入容器的操作

    这篇文章主要介绍了docker cp 拷贝文件 和 进入容器的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Docker容器开jupyter不能访问到的解决方法

    Docker容器开jupyter不能访问到的解决方法

    这篇文章主要介绍了Docker容器开jupyter不能访问到的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 使用docker+devpi搭建本地pypi源的方法

    使用docker+devpi搭建本地pypi源的方法

    这篇文章主要介绍了使用docker+devpi搭建本地pypi源的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • Docker搭建一个nginx服务的实现

    Docker搭建一个nginx服务的实现

    Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,本文主要介绍了Docker搭建一个nginx服务的实现,感兴趣的可以了解一下
    2024-08-08
  • 滚动 docker 中的 nginx 日志思路详解

    滚动 docker 中的 nginx 日志思路详解

    Nginx 自己没有处理日志的滚动问题,本文笔者介绍如何滚动运行在 docker 中的 nginx 日志文件,感兴趣的朋友一起看看吧
    2018-08-08
  • Docker搭建私有化仓库的几种方法

    Docker搭建私有化仓库的几种方法

    搭建 Docker 私有化仓库是一个非常重要的实践,它能够帮助你安全地存储和管理 Docker 镜像,本文主要介绍了Docker搭建私有化仓库的的几种方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • Docker拉取MySQL后数据库连接失败的解决方案

    Docker拉取MySQL后数据库连接失败的解决方案

    在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题,本文就来介绍一下解决方案,具有一定的参考价值,感兴趣的可以了解一下
    2025-06-06
  • Docker之DockerFile文件的使用及说明

    Docker之DockerFile文件的使用及说明

    本文介绍了Dockerfile的定义、构建过程以及Dockerfile的常见指令和体系结构,通过案例展示了如何创建自定义镜像并运行容器
    2025-12-12

最新评论