如何在不使用存储库的情况下将Docker映像从一台机器传输到另一台机器,无论是私有还是公共的?
我在VirtualBox中创建了自己的映像,完成后,我尝试部署到其他机器上以获得实际使用。
由于它基于我自己的镜像(如Red Hat Linux),因此无法从Dockerfile中重新创建。我的dockerfile不容易移植。
有没有简单的命令可以使用?还是另一种解决方案?
如何在不使用存储库的情况下将Docker映像从一台机器传输到另一台机器,无论是私有还是公共的?
我在VirtualBox中创建了自己的映像,完成后,我尝试部署到其他机器上以获得实际使用。
由于它基于我自己的镜像(如Red Hat Linux),因此无法从Dockerfile中重新创建。我的dockerfile不容易移植。
有没有简单的命令可以使用?还是另一种解决方案?
当前回答
使用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主机。
其他回答
您可以使用sshfs:
$ sshfs user@ip:/<remote-path> <local-mount-path>
$ docker save <image-id> > <local-mount-path>/myImage.tar
首先将Docker映像保存到压缩存档中:
docker save <docker image name> | gzip > <docker image name>.tar.gz
然后使用以下命令将导出的图像加载到Docker:
zcat <docker image name>.tar.gz | docker load
我想移动所有带标签的图像。
```
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加载可以获取这些内容。
您需要将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
要将图像从本地Docker安装传输到minikube VM:
docker save <image> | (eval $(minikube docker-env) && docker load)