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

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

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

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


当前回答

1.从注册表中提取图像或存储库。

docker pull[选项]名称[:TAG|@DIGEST]

2.将其保存为.tar文件。

docker save[选项]图像[图像…]

例如:

docker pull hello-world
docker save -o hello-world.tar hello-world

其他回答

要将映像保存到任何文件路径或共享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

请查找此详细帖子。

使用docker机器时,您可以使用以下方式在机器mach1和mach2之间复制图像:

docker $(docker-machine config <mach1>) save <image> | docker $(docker-machine config <mach2>) load

当然,您也可以将pv放在中间以获得进度指示器:

docker $(docker-machine config <mach1>) save <image> | pv | docker $(docker-machine config <mach2>) load

您还可以省略docker机器配置子shell之一,以使用当前默认的docker主机。

docker save <image> | docker $(docker-machine config <mach>) load

将图像从当前docker主机复制到mach

or

docker $(docker-machine config <mach>) save <image> | docker load

从mach复制到当前docker主机。

通过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:它提供了更高的压缩比。

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

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

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

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