如何在不使用存储库的情况下将 Docker 映像从一台主机复制到另一台主机?

如果您在自己的本地机器上有一个 Docker 镜像,并且您希望将该镜像复制到另一台机器上,那么有两种方法可以做到这一点。第一种是将该映像推送到存储库,例如 Dockerhub 注册表中的存储库。您需要在 Dockerhub 中拥有一个帐户,然后您可以使用 Docker push 命令将图像推送到其上。

但是,如果您不想经历创建帐户、标记图像等的所有麻烦,您可以使用其他简单的方法。让我们在本文中查看所有此类方法。

方法 1. 从 TAR 文件中保存和加载图像

Docker 允许您使用 Docker save 命令将图像保存到 tar 文件中。这也将压缩整个图像,并允许您轻松快速地共享它们。然后,您可以在另一台机器上使用 Docker load 命令从 tar 文件加载回 Docker 映像。这样做的命令是 -

$ docker save -o <tar file path in source host machine> <image name>

然后,您可以使用简单的工具(例如 cp、rsync、scp 等)或您喜欢的任何其他方法复制此 tar 文件。接下来,您可以使用 Docker load 命令从这个 tar 文件中恢复镜像。

$ docker load -i <path to image tar file>

方法二:通过SSH复制Docker镜像

您还可以通过 SSH 传输您的 Docker 映像并 bzip 内容以动态压缩它。这样做的命令是 -

$ docker save <image> | bzip2 | \
   ssh user@host 'bunzip2 | docker load'

如果您想检查传输是如何进行的,您可以通过管道使用 pv。

$ docker save <image> | bzip2 | pv | \
   ssh user@host 'bunzip2 | docker load'

方法 3. 使用 Docker 机器复制 Docker 镜像

如果您有两台 Docker 机器——machine1 和 machine2,您可以使用以下命令复制镜像。

$ docker $(docker-machine config machine1) save <image> | docker $(docker-machine config machine2) load

方法 4. 使用 DOCKER_HOST 变量复制图像

您还可以使用 DOCKER_HOST 变量将图像从一台主机复制到另一台主机。您将需要 SSH 凭据,并且本地和远程计算机上的用户都应该在 Docker 组中。

$ docker save <image name>:<tag-name> | gzip | DOCKER_HOST=ssh://user@remotehost docker load

方法五、使用Docker-push-ssh复制镜像

您有另一个名为 docker-push-ssh 的命令行实用程序。它将帮助您在主机服务器上设置一个临时的私有 Docker 注册表。然后它将从本地主机创建一个 SSH 隧道。接下来,它会推送 Docker 镜像并自动清理。

使用这种方法代替 docker save 命令的好处是,在这种情况下,只有新层总是被推送到服务器。这导致更快的上传。

为此,您必须首先使用以下 pip 命令安装 docker-push-ssh。

$ pip install docker-push-ssh

然后,您可以使用一行来推送图像。

$ docker-push-ssh -i ~/your-ssh-key your-username@your-server.com <docker-image>

方法 6. 使用 Docker Machine Scp 传输镜像

Docker Machine scp 的创建是为了将文件从特定的 Docker 机器复制或传输到另一台机器。如果您想将图像从本地机器复制到云上的远程 Docker 机器(例如 AWS 或 Digital Ocean),这将变得非常方便。这是因为 Docker Machine 会自动处理 SSH 凭据。

为此,您可以按照以下步骤操作 -

  • 使用 Docker 保存命令。

$ docker save -o <tar-file-location> <image name>

  • 使用 docker machine scp 传输 Docker 镜像。

$ docker-machine scp ./image-tar.tar target-machine:/home/ubuntu

这里,target-machine 是远程机器的名称,/home/ubuntu 是目标位置,而 image-tar 是 tar 文件的名称。

  • 加载 tar 文件。

$ docker-machine ssh target-machine sudo docker load -i image-tar.tar

总之,在本文中,我们讨论了 6 种不同的方法,您可以使用这些方法将 Docker 映像从一台本地机器复制或传输到另一台远程机器,而无需使用任何 Docker 注册表或存储库。根据您的方便和要求,您可以轻松使用任何讨论的方法。