如何在不使用存储库的情况下将Docker映像从一台机器传输到另一台机器,无论是私有还是公共的?

我在VirtualBox中创建了自己的映像,完成后,我尝试部署到其他机器上以获得实际使用。

由于它基于我自己的镜像(如Red Hat Linux),因此无法从Dockerfile中重新创建。我的dockerfile不容易移植。

有没有简单的命令可以使用?还是另一种解决方案?


当前回答

您可以将一行代码与DOCKER_HOST变量一起使用:

docker save app:1.0 | gzip | DOCKER_HOST=ssh://user@remotehost docker load

其他回答

dockerpushssh是我为这个场景创建的命令行实用程序。

它在服务器上建立一个临时的私有Docker注册表,从本地主机建立一个SSH隧道,推送映像,然后自行清理。

与docker save相比,这种方法的好处(在编写答案时,大多数答案都使用这种方法)是,只有新的层被推送到服务器,从而导致更快的上传。

通常,使用像dockerhub这样的中间注册表是不可取的,而且很麻烦。

https://github.com/brthor/docker-push-ssh

安装:

pip install docker-push-ssh

例子:

docker推ssh-i~/my_shkeyusername@myserver.com我的码头工人形象

最大的警告是,您必须手动将本地主机添加到Docker的insecure_registrys配置中。运行该工具一次,它会给您一个信息性错误:

Error Pushing Image: Ensure localhost:5000 is added to your insecure registries.
More Details (OS X): https://stackoverflow.com/questions/32808215/where-to-set-the-insecure-registry-flag-on-mac-os

我应该在Mac OS上的何处设置“--不安全注册表”标志?

所有其他答案都非常有用。我刚刚解决了同样的问题,并找到了一个使用docker机器scp的简单方法。

从Docker Machine v0.3.0开始,引入scp将文件从一台Docker机器复制到另一台。如果您想将文件从本地计算机复制到远程Docker机器(如AWS EC2或Digital Ocean),这非常方便,因为Docker机器正在为您处理SSH凭据。

使用docker保存图像,如:docker save-o docker-images.tar应用程序web使用docker machine scp复制图像码头机scp/docker-images.tar远程计算机:/home/ubuntu

假设您的远程Docker机器是远程机器,您希望tar文件所在的目录是/home/ubuntu。

加载Docker映像docker机器ssh远程机器sudo docker加载-i docker-images.tar

首先将Docker映像保存到压缩存档中:

docker save <docker image name> | gzip > <docker image name>.tar.gz

然后使用以下命令将导出的图像加载到Docker:

zcat <docker image name>.tar.gz | docker load

您可以使用sshfs:

$ sshfs user@ip:/<remote-path> <local-mount-path>
$ docker save <image-id> > <local-mount-path>/myImage.tar

保存所有图像的最佳方法如下:

docker save $(docker images --format '{{.Repository}}:{{.Tag}}') -o allimages.tar

以上代码将保存allimages.tar中的所有图像,要加载图像,请转到保存图像的目录并运行以下命令:

docker load -i allimages.tar

只需确保在PowerShell中而不是在Commad Prompt中使用此命令