如何在不使用存储库的情况下将 Docker 映像从一台主机复制到另一台主机?
如果您在自己的本地机器上有一个Docker镜像,并且您希望将该镜像复制到另一台机器上,那么有两种方法可以做到这一点。第一种是将该映像推送到存储库,例如Dockerhub注册表中的存储库。您需要在Dockerhub中拥有一个帐户,然后您可以使用Dockerpush命令将图像推送到其上。
但是,如果您不想经历创建帐户、标记图像等的所有麻烦,您可以使用其他简单的方法。让我们在本文中查看所有此类方法。
方法1.从TAR文件中保存和加载图像
Docker允许您使用Dockersave命令将图像保存到tar文件中。这也将压缩整个图像,并允许您轻松快速地共享它们。然后,您可以在另一台机器上使用Dockerload命令从tar文件加载回Docker映像。这样做的命令是-
$ docker save -o
然后,您可以使用简单的工具(例如cp、rsync、scp等)或您喜欢的任何其他方法复制此tar文件。接下来,您可以使用Dockerload命令从这个tar文件中恢复镜像。
$ docker load -i
方法二:通过SSH复制Docker镜像
您还可以通过SSH传输您的Docker映像并bzip内容以动态压缩它。这样做的命令是-
$ docker save| bzip2 | \ ssh user@host 'bunzip2 | docker load'
如果您想检查传输是如何进行的,您可以通过管道使用pv。
$ docker save| bzip2 | pv | \ ssh user@host 'bunzip2 | docker load'
方法3.使用Docker机器复制Docker镜像
如果您有两台Docker机器——machine1和machine2,您可以使用以下命令复制镜像。
$ docker $(docker-machine config machine1) save| docker $(docker-machine config machine2) load
方法4.使用DOCKER_HOST变量复制图像
您还可以使用DOCKER_HOST变量将图像从一台主机复制到另一台主机。您将需要SSH凭据,并且本地和远程计算机上的用户都应该在Docker组中。
$ docker save: | gzip | DOCKER_HOST=ssh://user@remotehost docker load
方法五、使用Docker-push-ssh复制镜像
您有另一个名为docker-push-ssh的命令行实用程序。它将帮助您在主机服务器上设置一个临时的私有Docker注册表。然后它将从本地主机创建一个SSH隧道。接下来,它会推送Docker镜像并自动清理。
使用这种方法代替dockersave命令的好处是,在这种情况下,只有新层总是被推送到服务器。这导致更快的上传。
为此,您必须首先使用以下pip命令安装docker-push-ssh。
$ pip install docker-push-ssh
然后,您可以使用一行来推送图像。
$ docker-push-ssh -i ~/your-ssh-key your-username@your-server.com
方法6.使用DockerMachineScp传输镜像
DockerMachinescp的创建是为了将文件从特定的Docker机器复制或传输到另一台机器。如果您想将图像从本地机器复制到云上的远程Docker机器(例如AWS或DigitalOcean),这将变得非常方便。这是因为DockerMachine会自动处理SSH凭据。
为此,您可以按照以下步骤操作-
使用Docker保存命令。
$ docker save -o
使用dockermachinescp传输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注册表或存储库。根据您的方便和要求,您可以轻松使用任何讨论的方法。