如果您在自己的本地机器上有一个 Docker 镜像,并且您希望将该镜像复制到另一台机器上,那么有两种方法可以做到这一点。第一种是将该映像推送到存储库,例如 Dockerhub 注册表中的存储库。您需要在 Dockerhub 中拥有一个帐户,然后您可以使用 Docker push 命令将图像推送到其上。
但是,如果您不想经历创建帐户、标记图像等的所有麻烦,您可以使用其他简单的方法。让我们在本文中查看所有此类方法。
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 映像并 bzip 内容以动态压缩它。这样做的命令是 -
$ docker save <image> | bzip2 | \ ssh user@host 'bunzip2 | docker load'
如果您想检查传输是如何进行的,您可以通过管道使用 pv。
$ docker save <image> | bzip2 | pv | \ ssh user@host 'bunzip2 | docker load'
如果您有两台 Docker 机器——machine1 和 machine2,您可以使用以下命令复制镜像。
$ docker $(docker-machine config machine1) save <image> | docker $(docker-machine config machine2) load
您还可以使用 DOCKER_HOST 变量将图像从一台主机复制到另一台主机。您将需要 SSH 凭据,并且本地和远程计算机上的用户都应该在 Docker 组中。
$ docker save <image name>:<tag-name> | gzip | DOCKER_HOST=ssh://user@remotehost docker load
您有另一个名为 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>
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 注册表或存储库。根据您的方便和要求,您可以轻松使用任何讨论的方法。