Docker仓库Registry维护和管理

  • A+
所属分类:技术分享

 
 

前面两篇文章说明了registry的版本离线安装

V1版本
https://www.qnjslm.com/ITHelp/413.html

V2版本
https://www.qnjslm.com/ITHelp/420.html

 
 

下面来说说我们日常仓库维护和管理

添加镜像

我们配置docker的registry地址为我们的registry服务器

查看下本地的images镜像

[root@registry opt]# docker images

假如我们要把httpd的镜像上传到registry上,一般我们会给镜像打上一个标签,这里我就是直接上传

[root@registry opt]# docker push httpd

110717 0330 DockerRegis1 - Docker仓库Registry维护和管理

我们把本地的images先删除,删除前请确认镜像没有被容器使用

[root@registry opt]# docker rmi httpd

110717 0330 DockerRegis2 - Docker仓库Registry维护和管理

 
 

然后我们从服务器上拉取镜像

[root@registry opt]# docker pull httpd

110717 0330 DockerRegis3 - Docker仓库Registry维护和管理

使用下载的镜像启动一个docker

[root@registry opt]# docker run -d -p 80:80 --name myserver httpd //启动docker

[root@registry opt]# docker ps //查看docker进程

[root@registry opt]# curl http://localhost //访问docker内容

110717 0330 DockerRegis4 - Docker仓库Registry维护和管理

 
 

以下是删除步骤,是比较麻烦的一个步骤

V1版本删除镜像

[root@registry ~]# curl -X DELETE https://localhost:5000/v1/repositories/openshift3/ose-docker-registry/tags/v3.0.1.0 -k

以下分享一个脚本,可以做V1版本镜像删除以及空间回收

https://github.com/King-Kuhn/docker_registry_clean

当前功能:

1.清理指定image:tag

2.当image所有的tag均删除后,会尝试删除该image历史冗余的所有镜像

3.清理某image下所有无用的层

操作方法:

1.下载本工具包docker_registry_clean

2.将docker_registry_clean目录放在docker私有仓库所在主机的某个目录下(需要有操作仓库目录的权限)

3.执行如下命令

删除指定镜像指定tag:

python delete-image.py {registry_path} {image_name:image_tag}

删除某镜像无用层:

python delete-image.py {registry_path} {image_name}

----------{registry_path}是仓库所在目录,其实就是启动仓库的时候指定的目录(-v /home/registry-storage:/home/registry-storage -w /home/registry-storage) 默认V1版本的仓库根目录下有这两个目录:images repositories

----------{image_name:image_tag} 镜像:tag

 
 

 
 

V2版本的registry清理

 
 

首现我们需要修改registry的配置文件,运行删除镜像操作

1、首现我们执行docker ps 查看registry信息,记住第一列的ID

2、我们执行docker inspect ID 查看容器的相信信息

110717 0330 DockerRegis5 - Docker仓库Registry维护和管理

 
 

3、在详细信息中我们找到这个容器的yml配置文件

/etc/docker/registry/config.yml

 
 

4、通过docker exec 命令进入容器中

[root@registry opt]# docker exec -it cbbc17f68e49 /bin/sh

 
 

6、修改容器配置

vi /etc/docker/registry/config.yml

在storage下面添加

delete:

enabled: true

 
 

110717 0330 DockerRegis6 - Docker仓库Registry维护和管理

 
 

7、退出容器我们使用docker 重启registry容器

[root@registry opt]# docker restart cbbc17f68e49

 
 

 
 

8、上传镜像到容器中,这里不说明,上传完成后我们进入到容器查看大小

110717 0330 DockerRegis7 - Docker仓库Registry维护和管理

9、根据官方文档,我们执行API的删除动作

DELETE /v2/<name>/manifests/<reference>

name:镜像名称,通过以下方式可以获取

curl -X GET http://localhost:5001/v2/_catalog

110717 0330 DockerRegis8 - Docker仓库Registry维护和管理

 
 

reference: 镜像对应sha256值,从以下路径查看,在容器里面

/var/lib/registry/docker/registry/v2/repositories/alex/registry-www.opskb.com/_manifests/tags/latest/index/sha256

 
 

curl -I -X DELETE http://localhost:5001/v2/alex/registry-www.opskb.com/manifests/sha256:6532fbcfdd73746ae5370ae9f86f3a1c582314b7d02f9f033806a653ca9a3a6e

110717 0330 DockerRegis9 - Docker仓库Registry维护和管理

看到HTTP/1.1 202 Accepte,已经删除成功

查看tags,已经为NULL

curl -X GET http://localhost:5001/v2/alex/registry-www.opskb.com/tags/list

110717 0330 DockerRegis10 - Docker仓库Registry维护和管理

下面是没删除之前

curl -X GET http://127.0.0.1:5001/v2/alex/registry-www.opskb.com/tags/list

110717 0330 DockerRegis11 - Docker仓库Registry维护和管理

这里其实我们只是删除了指定的tags,本身的images并没有删除,查看空间目录并没有变化,然后我们执行docker回收空间

registry garbage-collect /etc/docker/registry/config.yml

110717 0330 DockerRegis12 - Docker仓库Registry维护和管理

详细配置https://docs.docker.com/registry/configuration/

 
 

V2版本的删除脚本

https://github.com/burnettk/delete-docker-registry-image

头像

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: