如何在不使用存储库的情况下将Docker映像从一台机器传输到另一台机器,无论是私有还是公共的?
我在VirtualBox中创建了自己的映像,完成后,我尝试部署到其他机器上以获得实际使用。
由于它基于我自己的镜像(如Red Hat Linux),因此无法从Dockerfile中重新创建。我的dockerfile不容易移植。
有没有简单的命令可以使用?还是另一种解决方案?
如何在不使用存储库的情况下将Docker映像从一台机器传输到另一台机器,无论是私有还是公共的?
我在VirtualBox中创建了自己的映像,完成后,我尝试部署到其他机器上以获得实际使用。
由于它基于我自己的镜像(如Red Hat Linux),因此无法从Dockerfile中重新创建。我的dockerfile不容易移植。
有没有简单的命令可以使用?还是另一种解决方案?
当前回答
通过SSH传输Docker映像,动态压缩内容:
docker save <image> | bzip2 | ssh user@host docker load
请注意,docker load会自动为您解压缩图像。它支持gzip、bzip2和xz。
将pv放在管道中间也是一个好主意,可以查看传输情况:
docker save <image> | bzip2 | pv | ssh user@host docker load
(关于pv的更多信息:主页,手册页)。
来自@Thomas Steinbach的重要提示:在高带宽上,bzip压缩速度不够快。如果您可以以10 MB/s或更高的速度上传,gzip/gunzip将比bzip2快得多。
如果您使用3G,而您的互联网速度较慢,@jgmjgm建议您可以使用xz:它提供了更高的压缩比。
其他回答
要将映像保存到任何文件路径或共享NFS位置,请参阅以下示例。
通过执行以下操作获取图像id:
docker images
假设您有一个id为“矩阵数据”的图像。
使用id保存图像:
docker save -o /home/matrix/matrix-data.tar matrix-data
将图像从路径复制到任何主机。现在使用以下方法导入本地Docker安装:
docker load -i <path to copied image file>
我假设您需要保存图像id为7ebc8510bc2c的couchdb盒带:
stratos@Dev-PC:~$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
couchdb-cartridge latest 7ebc8510bc2c 17 hours ago 1.102 GB
192.168.57.30:5042/couchdb-cartridge latest 7ebc8510bc2c 17 hours ago 1.102 GB
ubuntu 14.04 53bf7a53e890 3 days ago 221.3 MB
将archiveName图像保存到tar文件。我将使用/media/sf_docker_vm/保存图像。
stratos@Dev-PC:~$ docker save imageID > /media/sf_docker_vm/archiveName.tar
将archiveName.tar文件复制到新的Docker实例中,使用任何在您的环境中有效的方法,例如FTP、SCP等。
在新的docker实例上运行docker load命令,并指定图像tar文件的位置。
stratos@Dev-PC:~$ docker load < /media/sf_docker_vm/archiveName.tar
最后,运行docker images命令检查图像是否可用。
stratos@Dev-PC:~$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
couchdb-cartridge latest 7ebc8510bc2c 17 hours ago 1.102 GB
192.168.57.30:5042/couchdb-cartridge latest bc8510bc2c 17 hours ago 1.102 GB
ubuntu 14.04 4d2eab1c0b9a 3 days ago 221.3 MB
请查找此详细帖子。
Run
docker images
以查看主机上的图像列表。假设您有一个名为awesome酱的图像。在终端中,cd到要导出图像的目录。现在运行:
docker save awesomesauce:latest > awesomesauce.tar
将tar文件复制到拇指驱动器或其他任何位置,然后将其复制到新的主机。
现在从新主机开始:
docker load < awesomesauce.tar
现在去喝杯咖啡,看看黑客新闻。。。
您需要将Docker映像保存为tar文件:
docker save -o <path for generated tar file> <image name>
然后使用常规的文件传输工具(如cp、scp或rsync)将图像复制到新系统中(对于大文件更为理想)。之后,您必须将图像加载到Docker中:
docker load -i <path to image tar file>
PS:您可能需要sudo所有命令。
编辑:您应该使用-o添加文件名(而不仅仅是目录),例如:
docker save -o c:/myfile.tar centos:16
如果您在Windows计算机上工作,并将命令(如
docker save <image> | ssh user@host docker load
如果您使用的是powershell,则不会起作用,因为它似乎在输出中添加了一个额外的字符。但是,如果使用cmd(命令提示符)运行该命令,则该命令将起作用。附带说明的是,您也可以使用Chocolatey安装gzip,以下内容也可以在cmd中使用。
docker save <image> | gzip | ssh user@host docker load