Registry+registry-web-ui方式管理,查看,删除镜像

docker registry与registry-web-UI部署使用

前段时间一直郁闷registry私有仓库中的镜像怎么删除,看了网上不少文章,经过实践找到了比较容器删除镜像的方法,结合registry的web界面管理方便查看镜像和删除镜像元数据,然后进入registry容器内部删除镜像层数据,配合registry的web管理项目叫registry-web-ui,下面记录一下完整的实施及实验过程。

部署registry与registry-web-ui

使用docker-compose文件部署,相关文件结构如下:

[root@registry registry]# tree ./
./
├── config.yml
├── docker-compose.yml
└── registry-web
    └── config.yml

docker-compose.yml内容:

version: '3'

services:

  registry:
    container_name: registry
    image: registry:2
    restart: always
    volumes:
      - /data/registry:/var/lib/registry
      - ./config.yml:/etc/docker/registry/config.yml
    environment:
      - REGISTRY_STORAGE_DELETE_ENABLED=true
    ports:
      - "5000:5000"
    networks:
      - registry

  registry-web:   #web管理工具
    container_name: registry-web
    image: hyper/docker-registry-web:latest
    restart: always
    ports:
      - "8080:8080"
    volumes:
      - ./registry-web/config.yml:/conf/config.yml  #registry仓库的配置文件

    networks:
      - registry

networks:
  registry:
    driver: bridge

创建一个registry网卡,因为docker-compose文件里定义了,registry-web-ui需要和registry在同一网络里,这样可以无障碍访问。

#创建网卡
docker network create --subnet=172.19.0.0/16 registry

docker-compose.yml文件中关联的config.yml文件内容如下:


version: 0.1 log: accesslog: disabled: true level: error formatter: text fields: service: registry storage: delete: enabled: true filesystem: #必须定义,否则容器启动不了 rootdirectory: /var/lib/registry http: addr: 0.0.0.0:5000 headers: X-Content-Type-Options: [nosniff] health: storagedriver: enabled: true interval: 10s threshold: 3

registry的config.yml可以查看registry配置官方文档

registry-web-ui关联的config.yml内容如下:

registry:
  # Docker registry url  
  url: http://registry:5000/v2   #这里直接使用主机ip或者127.0.0.1都不行,使用registry容器名称可以访问
  # Docker registry fqdn  
  name: localhost:5000
  # To allow image delete, should be false  
  readonly: false
  auth:
    # Disable authentication  
    enabled: false

Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。修改/etc/docker/daemon.json,添加"insecure-registries":["192.168.2.199:5000"];如下:

{
    "registry-mirrors": ["https://3exwebwf.mirror.aliyuncs.com"],
    "data-root":"/data/docker",
        "insecure-registries":["192.168.2.199:5000"]
}

上面的修改完成后重启动docker

启动服务:在docker-compose.yml所在目录下执行:docker-compose up -d指令启动两个容器,分别监听5000和8080端口。
访问web页面

《Registry+registry-web-ui方式管理,查看,删除镜像》

因为我之前单独使用过registry,所以有镜像在里面,这里可以忽略。完整的操作下去

在上传下载镜像之前,先查看一下registry仓库挂载的数据目录的大小为451M。

[root@registry ~]# du -sh /data/registry/
451M    /data/registry/

下面进行上传下载镜像测试:

下载镜像修改tag后上传到私有仓库

[root@registry ~]# docker pull centos:7
[root@registry ~]# docker tag centos:7 192.168.2.199:5000/system/centos:7

[root@registry ~]# docker image ls
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
192.168.2.199:5000/tccp/demo        v1.1                0a0e47617af3        42 hours ago        672MB
192.168.2.199:5000/system/centos    7                   1e1148e4cc2c        2 weeks ago         202MB

#上传
[root@registry ~]# docker push 192.168.2.199:5000/system/centos:7
The push refers to repository [192.168.2.199:5000/system/centos]
071d8bd76517: Pushed 
7: digest: sha256:365fc7f33107869dfcf2b3ba220ce0aa42e16d3f8e8b3c21d72af1ee622f0cf0 size: 529

#再传一个nginx镜像
[root@registry ~]# docker push 192.168.2.199:5000/nginx/nginx:latest

再查看registry-web页面如下:

《Registry+registry-web-ui方式管理,查看,删除镜像》

再看registry数据目录大小

[root@registry ~]# du -sh /data/registry/
566M    /data/registry/
#目录大小由451M变成了566M

通过registry-web页面删除,(这里删除只是删除了镜像的元数据信息,真正的镜像还没有被删除,如果没有web界面使用指令删除比较麻烦,所以探索一下使用web方式来管理,比较方便)

将刚才上传的两个镜像删除,如下:

《Registry+registry-web-ui方式管理,查看,删除镜像》

再查看registry数据目录

[root@registry ~]# du -sh /data/registry/
566M    /data/registry/
#空间没有释放,只删除了元数据

垃圾回收

进行容器执行垃圾回收命令,删除镜像的层数据

root@registry ~]# docker exec -it registry sh  #要用 sh 方式进去,bash无法进入

/ #  registry garbage-collect /etc/docker/registry/config.yml
44 blobs marked, 9 blobs eligible for deletion
blob eligible for deletion: sha256:1e1148e4cc2c148c6890a18e3b2d2dde41a6745ceb4e5fe94a923d811bf82ddb
blob eligible for deletion: sha256:365fc7f33107869dfcf2b3ba220ce0aa42e16d3f8e8b3c21d72af1ee622f0cf0
blob eligible for deletion: sha256:568c4670fa800978e08e4a51132b995a54f8d5ae83ca133ef5546d092b864acf
blob eligible for deletion: sha256:87e9b6904b4286b8d41bba4461c0b736835fcc218f7ecbe5544b53fdd467189f
blob eligible for deletion: sha256:a5a6f2f73cd8abbdc55d0df0d8834f7262713e87d6c8800ea3851f103025e0f0
blob eligible for deletion: sha256:1ba02017c4b278fe664e669af5e2eff59f92259df6c2f15261f150ae66599dff
blob eligible for deletion: sha256:33b176c904dea23b745303a0a69511750d009ac04fd9957520975a0546a67799
blob eligible for deletion: sha256:a02a4930cb5d36f3290eb84f4bfa30668ef2e9fe3a1fb73ec015fc58b9958b17
blob eligible for deletion: sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4
/ # 

容器内部的数据目录大小变了,宿主机上的数据目录也变了,就是由宿主机挂载进来的

/ # du -sh /var/lib/registry/
451.0M  /var/lib/registry/
[root@registry ~]# du -sh /data/registry/
452M    /data/registry/
[root@registry ~]# 

总结

registry的存储方式没有仔细研究过,镜像是元数据和层数据也不是很理解,只是简单理解元数据是镜像的索引数据,真正的层数据是镜像实体。(理解肯定有偏差)

点赞
  1. luo.la说道:

    Ye ! This Is A Good Blog!

发表评论

电子邮件地址不会被公开。 必填项已用*标注