Docker Registry以及Docker-Registry-UI部署
- 前言
- 一、下载镜像并启动
- 1.1 docker快速启动
- 1.2 docker-compose启动
- 二、查看registry版本
- 三、上传镜像到registry
- 四、删除镜像
- 4.1 配置registry允许删除镜像
- 4.2 删除镜像
- 4.2.1 命令删除
- 4.2.2 Registry管理界面删除
前言
部署Docker Registry之前先部署Docker
参考Docker、Docker Compose部署
Docker-Registry-UI(Registry管理界面)github项目地址:https://github.com/Joxit/docker-registry-ui
一、下载镜像并启动
# 注意:V3和V2版本对应的配置文件路径不一致# 下载最新版本镜像(目前是V3版本)dockerpull registry# 下载V2版本镜像(2.8.3版本)dockerpull registry:2# 下载Registry管理界面镜像(不需要界面则不需要下载该镜像)dockerpull joxit/docker-registry-ui:main# 创建数据目录mkdir/opt/registry/data1.1 docker快速启动
# 启动registrydockerrun -d -p5000:5000\--name=registry\--restart=always\-v /opt/registry/data:/var/lib/registry\# 启用删除功能(V3版本配置文件默认开启,可以不需要配置;V2版本需要删除功能就需要开启,或者修改配置文件开启)-eREGISTRY_STORAGE_DELETE_ENABLED='true'\# 如果需要启动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管理界面dockerrun -d -p5001:80\--name registry-ui\--restart=always\--envSINGLE_REGISTRY=true\--envREGISTRY_TITLE='Docker Registry UI'\--envREGISTRY_URL=http://192.168.1.114:5000\--envDELETE_IMAGES=true\--envSHOW_CONTENT_DIGEST=true\--envSHOW_CATALOG_NB_TAGS=true\--envTAGLIST_PAGE_SIZE=100\--envCATALOG_ELEMENTS_LIMIT=1000\--envREGISTRY_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使用HTTPS1.2 docker-compose启动
# 创建 docker-compose.ymlcd/opt/registryvimdocker-compose.yml version:'3.8'services: registry: image: registry container_name: registry restart: always ports: -"5000:5000"volumes: - /opt/registry/data:/var/lib/registry environment:# 启用删除功能(V3版本配置文件默认开启,可以不需要配置;V2版本需要删除功能就需要开启,或者修改配置文件开启)REGISTRY_STORAGE_DELETE_ENABLED:'true'# 如果需要启动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-composeup -d二、查看registry版本
# 查看registry版本:docker exec -it <container-name> registry --versiondockerexec-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"]}# 重启Dockersystemctl restartdocker# 登录registry仓库dockerlogin192.168.1.114:5000# docker下载nginx镜像并上传到registrydockerpull nginxdockertag nginx:latest192.168.1.114:5000/nginx:latestdockerpush192.168.1.114:5000/nginx:latest# 查看 repository 列表curlhttp://192.168.1.114:5000/v2/_catalog# 查看镜像 tag 列表:http://ip:5000/v2/<image_name>/tags/listcurlhttp://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.ymldockerexec-it registryfind/ -name"config.yml"# 进入容器内部dockerexec-it registry /bin/sh# V3版本# 查看storage.delete.enabled: true是否配置(默认已配置)cat/etc/distribution/config.yml version:0.1log: level: debug fields: service: registry environment: development storage: delete: enabled:truecache: blobdescriptor: inmemory filesystem: rootdirectory: /var/lib/registry tag: concurrencylimit:5http: addr: :5000 debug: addr: :5001 prometheus: enabled:truepath: /metrics health: storagedriver: enabled:trueinterval: 10s threshold:3# V2版本# 添加storage.delete.enabled: true(默认未配置)vi/etc/docker/registry/config.yml version:0.1log: 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:trueinterval: 10s threshold:3# 重启registry容器dockerrestart registry# 如果使用docker compose启动,则使用docker-compose restart重启#docker-compose restart4.2 删除镜像
4.2.1 命令删除
# 查询要删除镜像tag:http://192.168.1.114:5000/v2/<image_name>/tags/listcurlhttp://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.1200OK Content-Length:1778Content-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,26Jan202617:24:49 GMT# 调用registry接口删除镜像curl-I -X DELETE http://192.168.1.114:5000/v2/nginx/manifests/sha256:a6dd519f4cc2f69a8f049f35b56aec2e30b7ddfedee12976c9e289c07b421804# 输出如下:HTTP/1.1202Accepted Docker-Distribution-Api-Version: registry/2.0 Date: Tue,27Jan202609:35:07 GMT Content-Length:0# 执行垃圾回收,释放存储空间:docker exec -it <镜像仓库容器ID/名称> /bin/registry garbage-collect <镜像仓库配置文件># V3版本dockerexec-it registry bin/registry garbage-collect /etc/distribution/config.yml# V2版本dockerexec-it registry bin/registry garbage-collect /etc/docker/registry/config.yml4.2.2 Registry管理界面删除
# 执行垃圾回收,释放存储空间:docker exec -it <镜像仓库容器ID/名称> /bin/registry garbage-collect <镜像仓库配置文件># V3版本dockerexec-it registry bin/registry garbage-collect /etc/distribution/config.yml# V2版本dockerexec-it registry bin/registry garbage-collect /etc/docker/registry/config.yml