跳转到主要内容

一个简单的命令行工具,用于从源仓库复制许多标签(正则表达式过滤)到另一个仓库

项目描述

move-off-dockerhub

一个简单的命令行工具,用于从源仓库复制许多标签(正则表达式过滤)到另一个仓库

为什么?

当你想从 Docker Hub 迁移到另一个尚未将你踢出的Docker仓库(如 quay.io)时,你最好至少迁移一些旧镜像。这样,如果你的终端用户被Docker Hub限流,你可以告诉他们“嘿,只需指向quay.io上的相同镜像即可,它将继续工作,直到IBM将其搞砸!”这个小应用程序让你可以通过正则表达式过滤来复制旧仓库的子集标签。

安装

您可以从PyPI安装此应用程序

pip install move-off-dockerhub

您还需要安装 skopeo。相对容易,大多数发行版或homebrew都有打包。

用法

登录到Docker仓库

最好同时登录到源和目标Docker仓库,这样您就不会在源仓库被限流,并且能够将数据推送到目标仓库。您可以使用 skopeo login 命令来完成此操作。

# Login to DockerHub
$ skopeo login docker.io
Username: <enter-username>
Password: <enter-password>
Login Succeeded!
$ skopeo login quay.io
Username: <enter-username>
Password: <enter-password>
Login Succeeded!

进行Dry Run以确定要复制的标签

现在您可以进行Dry Run来查看标签列表,并筛选出您想要复制的标签。

我将使用dockerhub上的jupyterhub/k8s-hub作为示例。每当有提交影响到zero-to-jupyterhub-on-k8s时,就会为hub推送一个标签。但我们只想复制已发布版本的镜像。

$ move-off-dockerhub jupyterhub/k8s-hub quay.io/jupyterhub/k8s-hub '.*' --dry-run
<list-of-551-tags>

第一个参数是源镜像,第二个是目的地(现在被忽略),第三个是必须匹配以复制的正则表达式(需要引号)。--dry-run只会显示将要复制的标签列表,但不会实际复制。在这种情况下,我们指定.*,这样我们就可以查看所有标签,向教授献祭一只山羊,并构造一个只列出我们想要的标签的正则表达式。

经过一些尝试和献祭,我们找到了一个完美的、易于阅读的咒语,它给了我们所有想要的标签

$ move-off-dockerhub jupyterhub/k8s-hub quay.io/jupyterhub/k8s-hub 'v?\d+\.\d+\.?\d*$' --dry-run
Copying the following tags:
0.10.0
0.10.1
0.10.2
0.10.3
0.10.4
0.10.5
0.10.6
0.11.0
0.11.1
0.7.0
0.8.0
0.8.1
0.8.2
0.9.0
0.9.1
1.0.0
1.0.1
1.1.0
1.1.1
1.1.2
1.1.3
1.1.4
1.2.0
2.0.0
3.0.0
3.0.1
3.0.2
3.0.3
3.1.0
v0.1
v0.3.1
v0.4
v0.5.0
v0.6

v?\d+\.\d+\.\d*$查找可选的前面有一个v的标签(因为一些发布版本有),然后是三个数字(可以是任意长度)由点分隔,最后一个数字是可选的。构造这个正则表达式需要对这些电子做出很多献祭,希望你能欣赏它们。

实际进行复制

首先,确保你有一个良好的互联网连接。如果你在同一个互联网连接上试图观看板球世界杯比赛,你可能会有一场争吵。不要这么做。

当情况变得明朗时,运行相同的命令,但不带--dry-run

$ move-off-dockerhub jupyterhub/k8s-hub quay.io/jupyterhub/k8s-hub 'v?\d+\.\d+\.?\d*$' --dry-run
<lots--of-information-you-don't-need-will-be-output-and-inside-it-will-be-some-info-you-want>

现在,你可以四处走走,喝杯咖啡,喂喂猫,尝试在镜像复制的过程中想清楚你将要在发布说明中写什么,风险资本的意义是什么等等。

如果源镜像支持多架构,所有可用的架构都将被复制。

如果你再次运行脚本,之前复制的标签仍然会尝试复制,但可能很快就会过去。skopeo是由一些聪明的人开发的,所以我只是假设他们做了些聪明的事,并没有实际验证这一点。

为什么叫这个名字呢?

我昨晚没有睡好,所以我的大脑无法想出一个更好的名字。现在你只能接受它了哈哈哈。

如果你想让这有一个不同的名字,我愿意接受建议,但只来自在过去3个月内没有在Twitter上发过帖的人。

为什么是AGPL?

从小的时候起,我就开始写代码,其他人觉得很有用,因为好玩。作为一个成年人,我很幸运能写出我关心的事业代码,和对我很好的人一起工作,而且还能从中获得报酬!这太棒了!在治疗中,我们发现仍然很重要去做一些“只是为了好玩”的事情。对我来说,写一些对别人没有实际用处的代码并不觉得是“好玩”的,但我也想体验“嘿,有新东西了!”的感觉。

现在,这个项目肯定是为了Jupyter项目的利益而创建的。鉴于这个项目的命令行特性,它对任何用户都没有实际的影响。但也许它的新奇之处会给我带来多巴胺的刺激!?!我们将拭目以待。

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适合您平台的文件。如果您不确定该选择哪个,请了解更多关于安装包的信息。

源代码发行版

move-off-dockerhub-1.0.tar.gz (16.2 kB 查看散列)

上传时间:

构建发行版

move_off_dockerhub-1.0-py3-none-any.whl (16.7 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面