如何在不使用存储库的情况下将Docker镜像从一个主机复制到另一个主机
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在不使用存储库的情况下将Docker镜像从一个主机复制到另一个主机相关的知识,希望对你有一定的参考价值。
如何在不使用存储库的情况下将Docker镜像从一台计算机传输到另一台计算机,无论是私有还是公共?
我习惯在VirtualBox中播放和创建自己的图像,当它完成后,我尝试部署到其他机器以实现真正的用途。
由于它基于自己的映像(如Red Hat Linux),因此无法从Dockerfile重新创建它。
我可以使用简单的命令吗?或另一种解决方案
似乎保存/导出可以达到类似的目的,请参阅What is the difference between save and export in Docker?,我更喜欢save
命令。
您需要将Docker镜像保存为tar文件:
docker save -o <path for generated tar file> <image name>
然后使用常规文件传输工具(如cp
或scp
)将图像复制到新系统。之后,您将不得不将图像加载到Docker中:
docker load -i <path to image tar file>
PS:你可能需要sudo
所有命令。
编辑:您应该使用-o添加文件名(而不仅仅是目录),例如:
docker save -o c:/myfile.tar centos:16
所有其他答案都非常有帮助。我刚刚经历了同样的问题,并找到了一个简单的方法与docker save <image> | (eval $(minikube docker-env) && docker load)
。
自Docker Machine v0.3.0起,引入了scp将文件从一台Docker机器复制到另一台机器。如果您希望将文件从本地计算机复制到远程Docker计算机(如AWS EC2或Digital Ocean),这非常方便,因为Docker Machine正在为您处理SSH凭据。
- 使用
docker machine scp
保存图像,如:docker save
- 使用
docker save -o docker-images.tar app-web
复制图像 docker-machine scp
假设您的远程Docker机器是docker-machine scp ./docker-images.tar remote-machine:/home/ubuntu
,您希望tar文件所在的目录是remote-machine
。
- 加载Docker镜像
/home/ubuntu
docker-machine ssh remote-machine sudo docker load -i docker-images.tar
是一个仅适用于此场景的命令行实用程序。
它在服务器上设置临时私有Docker注册表,从您的localhost建立SSH隧道,推送您的图像,然后自行清理。
这种方法优于docker-push-ssh
(在编写大多数答案时都使用此方法)的好处是只有新层被推送到服务器,从而导致更快的上传。
通常使用像dockerhub这样的中间注册表是不可取的,也很麻烦。
docker save
安装:
https://github.com/brthor/docker-push-ssh
例:
pip install docker-push-ssh
最大的警告是你必须手动将本地主机添加到Docker的docker-push-ssh -i ~/my_ssh_key username@myserver.com my-docker-image
配置中。运行一次该工具,它将为您提供信息错误:
insecure_registries
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
你可以使用Where should I set the '--insecure-registry' flag on Mac OS?:
sshfs
我想用标签移动所有图像。
$ sshfs user@ip:/<remote-path> <local-mount-path>
$ docker save <image-id> > <local-mount-path>/myImage.tar
说明:
首先```
OUT=$(docker images --format '{{.Repository}}:{{.Tag}}')
OUTPUT=($OUT)
docker save $(echo "${OUTPUT[*]}") -o /dir/images.tar
```
得到所有标签,但用新线分开。第二个OUT
获取数组中的所有标签。第三个OUTPUT
将所有标签放在一个$(echo "${OUTPUT[*]}")
命令中,以便所有图像都在一个tar中。
此外,这可以使用gzip压缩。在目标上,运行:
docker save
tar xvf images.tar.gz -O | docker load
的-O
选项将内容放在stdin上,可以被tar
抓住。
这是您可以在两个远程寄存器/存储库之间移动Docker映像的方法。它适用于Docker 1.10.2版本,构建c3959b1。
docker load
如果要将映像迁移到AWS ECS / ECR服务,这是一种方便的方法。
通过SSH传输Docker镜像,即时压缩内容:
docker save <image> | bzip2 | \
ssh user@host 'bunzip2 | docker load'
将pv
放在管道中间以查看转移的进展情况也是一个好主意:
docker save <image> | bzip2 | pv | \
ssh user@host 'bunzip2 | docker load'
(有关pv
的更多信息:home page,man page)。
要将映像保存到任何文件路径或共享NFS位置,请参阅以下示例。
通过执行以下操作获取图片ID:
sudo docker images
假设您有一个id为“matrix-data”的图像。
使用id保存图像:
sudo docker save -o /home/matrix/matrix-data.tar matrix-data
将映像从路径复制到任何主机。现在使用以下命令导入到本地Docker安装:
sudo docker load -i <path to copied image file>
首先将Docker镜像保存为zip文件:
docker save <docker image name> | gzip > <docker image name>.tar.gz
然后使用以下命令将导出的图像加载到Docker:
zcat <docker image name>.tar.gz | docker load
跑
docker images
查看主机上的图像列表。假设您有一张名为awesomesauce的图片。在您的终端中,cd
到您要将图像导出到的目录。现在运行:
docker save awesomesauce:latest > awesomesauce.tar
将tar文件复制到拇指驱动器或其他任何内容,然后将其复制到新的主机。
现在从新主机做:
docker load < awesomesauce.tar
现在去喝咖啡,阅读Hacker News ...
使用docker-machine时,您可以在机器mach1
和mach2
之间复制图像:
docker $(docker-machine config <mach1>) save <image> | docker $(docker-machine config <mach2>) load
当然你也可以在中间贴上qazxsw poi以获得进度指示器:
pv
您也可以省略其中一个docker $(docker-machine config <mach1>) save <image> | pv | docker $(docker-machine config <mach2>) load
子shell,以使用当前的默认docker-host。
docker-machine config
将图像从当前的docker-host复制到docker save <image> | docker $(docker-machine config <mach>) load
要么
mach
从docker $(docker-machine config <mach>) save <image> | docker load
复制到当前的docker-host。
对于容器文件系统的扁平导出,请使用;
mach
使用docker export CONTAINER_ID > my_container.tar
导入所述图像。
我假设您需要保存图像ID为7ebc8510bc2c的cat my_container.tar | docker import -
:
couchdb-cartridge
将archiveName映像保存到tar文件。我将使用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
来保存图像。
/media/sf_docker_vm/
使用环境中适用的任何方法将archiveName.tar文件复制到新的Docker实例,例如stratos@Dev-PC:~$ docker save imageID > /media/sf_docker_vm/archiveName.tar
,FTP
等。
在新的Docker实例上运行SCP
命令并指定映像tar文件的位置。
docker load
最后,运行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镜像从一个主机复制到另一个主机的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用库的情况下将默认名称“选择文件”更改为“选择文档”? [复制]
如何在不创建 IAM 用户的情况下将文件从 EKS 上传到 S3 存储桶?
如何在不包含所有spring-boot库的情况下将spring-boot应用程序部署到nexus?