Docker Registry以及Docker-Registry-UI部署过程
作者:凭X而动
这篇文章主要介绍了Docker Registry以及Docker-Registry-UI部署过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
前言
部署Docker Registry之前先部署Docker
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 pull报错Get"https://registry-1.docker.io/v2/": net/http: request canceled while waiting for c的问题
- Docker pull时报错:https://registry-1.docker.io/v2/完美解决办法
- docker配置镜像Docker pull时报错:https://registry-1.docker.io/v2/问题
- Docker Registry私有仓库简单搭建过程
- k8s集群中运行docker registry镜像仓库实践
- docker-registry私有仓库镜像之查看与删除实现方式
- 部署Docker Registry并配置认证登录教程
