继开源项目Elastic Shell发布以后,晴耕工坊近期又有新品发布啦!今天,我们继续来了解Docker Registry CLI这款开源小工具。

上一篇文章中,我们了解了什么是Docker Registry CLI,如何运行,以及复制与查询Image的一些基本方法。在本文中,我们将进一步介绍如何从多个Registry批量复制Image到目标Registry,更加灵活丰富的查询功能,以及如何清理Registry上的Image。

复制更多的Image

目前为止,我们已经成功将第一个Image复制到mr.io上了。接下来,让我们再多复制一些Image。reg-cli cp支持一次复制多个Image,只要把它们在一行命令里用空格隔开即可。例如:

bash-4.4# reg-cli cp morningspace/docker-registry-cli morningspace/elastic-shell mr.io

上述命令会同时将docker-registry-clielastic-shell复制到mr.io

如果在reg-cli ls命令后面也加上多个Image,并以空格间隔,我们就可以查看多个Image的Tag了。例如:

bash-4.4# reg-cli ls mr.io/docker-registry-cli mr.io/elastic-shell

当然,也可以利用-ld-lm选项,查看这些Image的Digest和Manifest。

利用.list文件批量复制

除此以外,reg-cli cp还支持从配置文件读取要复制的Image。将存储Image的源Registry名作为配置文件名,以.list为扩展名,在配置文件里指定所有要复制的Image,每行一个;然后,在执行reg-cli cp时指定源Registry名,Docker Registry CLI就会在当前目录下寻找同名的.list文件,逐行读取进行复制。

GitHub库/samples/registries子目录下包含有若干个可供大家参考的.list文件。以morningspace.list为例,包含了许多以morningspace打头的Image。它们都来自Docker Hub的morningspace名字空间下:

morningspace/lab-web
morningspace/lab-lb
morningspace/lab-git-remote
morningspace/lab-git-local
morningspace/elastic-shell
morningspace/docker-registry-cli

在该文件所在目录下执行如下命令,就可以把上述Image批量推送到mr.io

bash-4.4# reg-cli cp morningspace mr.io

不仅如此,.list文件还支持嵌套!例如,和morningspace.list位于同一目录下的all.list包含了针对另两个.list文件的引用,分别指向Docker Hub和Google Container Registry:

k8s.gcr.io
morningspace

执行如下命令,可以将分别来自这两个不同Registry的Image复制到mr.io

bash-4.4# reg-cli cp all mr.io

等待命令执行完毕后,再利用reg-cli ls查看mr.io的Catalog。我们会发现,在all.list文件所指向的另两个.list文件里定义的所有Image都已经被成功复制到mr.io了!

bash-4.4# reg-cli ls mr.io
mr.io
---------------------------------------
coredns
docker-registry-cli
elastic-shell
etcd
hyperkube
kubernetes-dashboard-amd64
lab-git-local
lab-git-remote
lab-lb
lab-web
pause

同样的,我们可以通过在reg-cli ls命令后面加上多个Image来查看这些Image的Tag,也可以利用-ld-lm选项,查看它们的Digest和Manifest。

我们甚至还可以查看整个me.io上所有Image的Tag(通过-lt选项),Digest和Manifest信息。例如:

bash-4.4# reg-cli ls mr.io -lt
mr.io/coredns
---------------------------------------
1.2.6

mr.io/docker-registry-cli
---------------------------------------
latest

mr.io/elastic-shell
---------------------------------------
latest
v0.3
...

最少的命令参数完成最多的功能

通过对reg-cli lsreg-cli cp命令的使用我们可以看到,Docker Registry CLI虽然只提供了很少的命令及参数,但是通过这些命令及其参数的组合,却完成了非常丰富的功能。

接下来,我们再来看另一个命令reg-cli rm,该命令用于删除Registry上的Image或Tag。同样,该命令也是符合这一设计原则的。

清理Image

利用reg-cli rm命令,我们可以删除位于mr.io上的Image及其Tag。例如,下列命令可以删除指定Image的某个Tag:

bash-4.4# reg-cli rm mr.io/hyperkube:v1.13.0
reg-cli:(INFO) going to remove hyperkube:v1.13.0
Are you sure? [y/N] y
reg-cli:(INFO) digest: sha256:8ef688eb5bb739e7f22502e15b78eb6bd684d2957dfda7c64638cec0e9eacb3d
reg-cli:(INFO) ✔ hyperkube:v1.13.0 removed

根据提示,输入y后即可删除mr.io/hyperkube:v1.13.0

同样的,reg-cli rm命令也可以一次删除同一Image的多个Tag,只要在Image后面跟多个Tag,并以逗号间隔即可:

bash-4.4# reg-cli rm mr.io/hyperkube:v1.13.0,v1.12.1

如果Image后面没有跟任何Tag,则Docker Registry CLI会试图删除该Image的所有Tag:

bash-4.4# reg-cli rm mr.io/hyperkube

此外,如果不希望每次删除一个Image或Tag时都显示提示信息,可以加上-f选项,指定强制删除:

bash-4.4# reg-cli rm mr.io/hyperkube:v1.13.0,v1.12.1 -f

严格遵循Linux命令的语法

通过前面针对reg-cli cpreg-cli ls,及reg-cli rm的使用,我们可以看到,Docker Registry CLI的命令语法非常类似于Linux中cpls,及rm命令。这是在该工具设计之初就恪守的一个原则。因为遵循了这一原则,所以只要熟悉这些常用的Linux命令,用户就很容易掌握对Docker Registry CLI的使用方法。

好了,有关Docker Registry CLI的使用就介绍到这里了。

关于Docker Registry CLI,如果你有任何疑问,或者希望通过贡献代码来增强这一工具,欢迎发送邮件至morningspace@yahoo.com。更多详情请访问GitHub库晴耕工坊的主页。


Have fun!

MorningSpace Studio

留下评论

您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 *

正在加载...