如何在不使用存储库的情况下将Docker映像从一台机器传输到另一台机器,无论是私有还是公共的?
我在VirtualBox中创建了自己的映像,完成后,我尝试部署到其他机器上以获得实际使用。
由于它基于我自己的镜像(如Red Hat Linux),因此无法从Dockerfile中重新创建。我的dockerfile不容易移植。
有没有简单的命令可以使用?还是另一种解决方案?
如何在不使用存储库的情况下将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
其他回答
如果您在Windows计算机上工作,并将命令(如
docker save <image> | ssh user@host docker load
如果您使用的是powershell,则不会起作用,因为它似乎在输出中添加了一个额外的字符。但是,如果使用cmd(命令提示符)运行该命令,则该命令将起作用。附带说明的是,您也可以使用Chocolatey安装gzip,以下内容也可以在cmd中使用。
docker save <image> | gzip | ssh user@host docker load
要将映像保存到任何文件路径或共享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>
我想移动所有带标签的图像。
```
OUT=$(docker images --format '{{.Repository}}:{{.Tag}}')
OUTPUT=($OUT)
docker save $(echo "${OUTPUT[*]}") -o /dir/images.tar
```
说明:
First OUT获取所有标记,但用新行分隔。第二个OUTPUT获取数组中的所有标记。第三个$(echo“${OUTPUT[*]}”)为单个docker save命令放置所有标记,以便所有图像都在一个tar中。
此外,这可以使用gzip压缩。在目标上运行:
tar xvf images.tar.gz -O | docker load
-tar的O选项将内容放在stdin上,docker加载可以获取这些内容。
根据@kolypto的回答,这对我来说很有用,但只适用于docker加载的sudo:
docker save <image> | bzip2 | pv | ssh user@host sudo docker load
或者如果您没有/不想安装pv:
docker save <image> | bzip2 | ssh user@host sudo docker load
无需手动压缩或类似操作。
Run
docker images
以查看主机上的图像列表。假设您有一个名为awesome酱的图像。在终端中,cd到要导出图像的目录。现在运行:
docker save awesomesauce:latest > awesomesauce.tar
将tar文件复制到拇指驱动器或其他任何位置,然后将其复制到新的主机。
现在从新主机开始:
docker load < awesomesauce.tar
现在去喝杯咖啡,看看黑客新闻。。。