How to copy Docker images from one host to another without using a repository
无论是私有的还是公共的,我如何在不使用存储库的情况下将Docker映像从一台机器传输到另一台机器?
我习惯于在virtualbox中播放和创建自己的映像,当它完成后,我会尝试部署到其他机器上以获得真正的使用。
由于它基于自己的映像(如RedHatLinux),因此无法从Dockerfile中重新创建。
我可以使用简单的命令吗?或者其他解决方案?
保存/导出似乎可以达到类似的目的,看看Docker中的保存和导出有什么区别?我更喜欢用
您需要将Docker映像保存为tar文件:
1 | docker save -o <path for generated tar file> <image name> |
然后用常规文件传输工具(如
1 | docker load -i <path to image tar file> |
附:你可能需要所有的命令。
编辑:您应该使用-o添加文件名(不只是目录),例如:
1 | docker save -o c:/myfile.tar centos:16 |
通过ssh传输docker映像,bzipping内容在运行中:
1 2 | docker save <image> | bzip2 | \ ssh user@host 'bunzip2 | docker load' |
最好将
1 2 | docker save <image> | bzip2 | pv | \ ssh user@host 'bunzip2 | docker load' |
(更多关于
要将映像保存到任何文件路径或共享的NFS位置,请参见以下示例。
通过执行以下操作获取图像ID:
1 | sudo docker images |
假设你有一个ID为"矩阵数据"的图像。
用ID保存图像:
1 | sudo docker save -o /home/matrix/matrix-data.tar matrix-data |
将映像从路径复制到任何主机。现在导入到本地Docker安装,使用:
1 | sudo docker load -i <path to copied image file> |
首先将Docker映像保存到zip文件:
1 | docker save <docker image name> | gzip > <docker image name>.tar.gz |
然后使用以下命令将导出的图像加载到Docker:
1 | zcat <docker image name>.tar.gz | docker load |
跑
1 | docker images |
查看主机上的图像列表。假设你有一个叫冬虫夏草酱的形象。在您的终端中,
1 | docker save awesomesauce:latest > awesomesauce.tar |
将tar文件复制到拇指驱动器或其他驱动器,然后将其复制到新的主机。
现在从新主机开始:
1 | docker load < awesomesauce.tar |
现在去喝杯咖啡,阅读黑客新闻…
使用docker machine时,可以在
1 | docker $(docker-machine config <mach1>) save <image> | docker $(docker-machine config <mach2>) load |
当然,你也可以把
1 | docker $(docker-machine config <mach1>) save <image> | pv | docker $(docker-machine config <mach2>) load |
您也可以省略其中一个子shell
1 | docker save <image> | docker $(docker-machine config <mach>) load |
将图像从当前Docker主机复制到
或
1 | docker $(docker-machine config <mach>) save <image> | docker load |
从
对于容器文件系统的扁平导出,请使用;
使用
我想您需要保存图像ID为7EBC8510BC2C的
1 2 3 4 5 | 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文件中。我将使用
1 | stratos@Dev-PC:~$ docker save imageID > /media/sf_docker_vm/archiveName.tar |
使用在您的环境中工作的任何方法(例如
在新的Docker实例上运行
1 | stratos@Dev-PC:~$ docker load < /media/sf_docker_vm/archiveName.tar |
最后,运行
1 2 3 4 5 | 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安装的图像传输到Minikube虚拟机:
1 | docker save <image> | (eval $(minikube docker-env) && docker load) |
所有其他答案都非常有用。我也遇到了同样的问题,并且找到了一个简单的方法来处理
由于docker machine v0.3.0,引入了scp将文件从一台docker machine复制到另一台docker machine。如果您希望将文件从本地计算机复制到远程Docker计算机(如AWS EC2或Digital Ocean),这非常方便,因为Docker计算机正在为您处理ssh凭据。
使用
1 | docker save -o docker-images.tar app-web |
使用Docker机器SCP复制图像
1 | docker-machine scp ./docker-images.tar remote-machine:/home/ubuntu |
假设您的远程docker机器是
加载Docker映像
1 | docker-machine ssh remote-machine sudo docker load -i docker-images.tar |
它在服务器上建立了一个临时的私有Docker注册表,在本地主机上建立了一个ssh通道,推送您的映像,然后自己清理。
与
通常使用中间注册表(如DockerHub)是不可取的,而且很麻烦。
https://github.com/brthor/docker-push-ssh
安装:
1 | pip install docker-push-ssh |
例子:
最大的警告是,您必须手动将本地主机添加到Docker的
1 2 | 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上的"--不安全注册表"标志?
我想移动所有带标签的图像。
1 2 3 4 5 | ``` OUT=$(docker images --format '{{.Repository}}:{{.Tag}}') OUTPUT=($OUT) docker save $(echo"${OUTPUT[*]}") -o /dir/images.tar ``` |
说明:
首先,
此外,还可以使用gzip对其进行压缩。在目标上,运行:
1 | tar xvf images.tar.gz -O | docker load |
您可以使用
1 2 | $ sshfs user@ip:/<remote-path> <local-mount-path> $ docker save <image-id> > <local-mount-path>/myImage.tar |
这就是如何在两个远程寄存器/存储库之间移动Docker映像。它与Docker版本1.10.2、构建c3959b1一起工作。
1 2 3 | docker pull source-registry.com/myProject/myImageName:1.0.0 docker tag source-registry.com/myProject/myImageName:1.0.0 target-remote-registry.com/myProject/myImageName:1.0.0 docker push target-remote-registry.com/myProject/myImageName:1.0.0 |
如果您想将图像迁移到一个AWS ECS/ECR服务,这是一个方便的方法。