将镜像从 Docker 注册表克隆到另一个

问题描述 投票:0回答:3

我有一个包含一组图像的私人注册表。它可以被视为应用程序存储。 我的应用程序可以获取这些应用程序并在其他计算机上运行它们。 为了实现这一目标,我的应用程序首先从私有注册表中提取映像,然后将其复制到本地注册表以供以后使用。

步骤如下:

docker pull privateregistry:5000/company/app:tag
docker tag privateregistry:5000/company/app:tag localregistry:5000/company/app:tag
docker push localregistry:5000/company/app:tag

然后在我网络中的另一台机器上:

docker pull localregistry:5000/company/app:tag

有没有一种方法可以有效地将图像从存储库复制到另一个存储库,而无需在中间使用 Docker 客户端?

docker docker-registry
3个回答
2
投票

您可以使用

docker save
将图像保存到 tar 存档中,然后将 tar 复制到新主机并使用
docker load
解压它。

阅读以下链接了解更多信息 https://docs.docker.com/engine/reference/commandline/save/


2
投票

有没有一种方法可以有效地将图像从存储库复制到另一个存储库,而无需在中间使用 Docker 客户端?

是的,现在有多种工具可以实现这一点。 RedHat 一直在推动他们的 skopeo,Google 有 crane,而我一直在自己使用 regclient。这些工具中的每一个都直接与注册表服务器对话,而不需要 Docker 引擎。至少对于 regclient (我没有测试其他的),这些只会复制目标注册表中尚未存在的层,从而避免再次拉取层的需要。此外,您可以移动多平台图像,保留所有可用平台,如果

docker pull
则会丢失这些平台,因为这会将图像取消引用到单个平台。


0
投票

这是使用 skopeo 的一行:

docker run --rm -it -v ${HOME}/.docker/config.json:/config.json:ro quay.io/skopeo/stable:latest copy --authfile /config.json docker://${SRC_IMAGE} docker://${DST_IMAGE}

其中

SRC_IMAGE
DST_IMAGE
是 docker 镜像的完整路径,包括注册表 URL、镜像名称和标签。请注意,对于 Docker Hub 链接,您可能需要包含注册表 URL
docker.io
,例如
docker.io/linuxserver/wireguard:legacy

上述命令假设您用于登录私有注册表的 docker 凭据位于标准位置

~/.docker/config.json

© www.soinside.com 2019 - 2024. All rights reserved.