Docker Registry以及Docker-Registry-UI部署
·
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
更多推荐




所有评论(0)