如何在不使用仓库的情况下将Docker镜像从一台主机复制到另一台主机?
如果您在本地机器上有一个Docker镜像,并且想要将该镜像复制到另一台机器,则有两种方法可以做到这一点。第一种方法是将该镜像推送到Docker Hub注册表等仓库中。您需要在Docker Hub上拥有一个帐户,然后可以使用Docker push命令将镜像推送到其中。
但是,如果您不想经历创建帐户、标记镜像等的麻烦,则可以使用其他简单的方法。让我们在这篇文章中查看所有这些方法。
方法一:从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镜像,并实时压缩内容。
$ docker save <image> | bzip2 | \ ssh user@host 'bunzip2 | docker load'
如果您想检查传输过程,可以使用管道中的pv。
$ docker save <image> | bzip2 | pv | \ ssh user@host 'bunzip2 | docker load'
方法三:使用Docker机器复制Docker镜像
如果您有两台Docker机器——machine1和machine2,您可以使用以下命令复制镜像。
$ docker $(docker-machine config machine1) save <image> | docker $(docker-machine config machine2) load
方法四:使用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 [email protected] <docker-image>
方法六:使用Docker Machine scp传输镜像
创建Docker Machine scp是为了将文件从一台Docker机器复制或传输到另一台机器。如果您想将镜像从本地机器复制到云上的远程Docker机器(例如AWS或Digital Ocean),它将非常方便。这是因为Docker Machine将自动处理SSH凭据。
为此,您可以按照以下步骤操作:
- 使用Docker save命令。
$ 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注册表或仓库。根据您的方便和需求,您可以轻松地使用任何讨论过的方法。