如何在不使用存储库的情况下将Docker镜像从一台计算机传输到另一台计算机,无论是私有还是公共?
我习惯在VirtualBox中播放并创建自己的图像,当它完成后,我尝试部署到其他机器上以实现真正的用途.
由于它基于自己的映像(如Red Hat Linux),因此无法从Dockerfile重新创建它.
我可以使用简单的命令吗?或另一种解决方案
看来save/export可以达到类似的目的,看看Docker中保存和导出有什么区别?,我更喜欢save
我的情况下的命令.
Dai*_*wei 2008
您需要将Docker镜像保存为tar文件:
docker save -o <path for generated tar file> <image name>
Run Code Online (Sandbox Code Playgroud)
然后使用常规文件传输工具(如cp
或)将图像复制到新系统scp
.之后,您将不得不将图像加载到Docker中:
docker load -i <path to image tar file>
Run Code Online (Sandbox Code Playgroud)
PS:您可能需要rsync
所有命令.
编辑:您应该使用-o添加文件名(而不仅仅是目录),例如:
docker save -o c:/myfile.tar centos:16
Run Code Online (Sandbox Code Playgroud)
kol*_*pto 536
通过SSH传输Docker镜像,即时压缩内容:
docker save <image> | bzip2 | \
ssh user@host 'bunzip2 | docker load'
Run Code Online (Sandbox Code Playgroud)
放在pv
管道中间以查看传输的进展情况也是一个好主意:
docker save <image> | bzip2 | pv | \
ssh user@host 'bunzip2 | docker load'
Run Code Online (Sandbox Code Playgroud)
Soh*_*han 87
要将映像保存到任何文件路径或共享NFS位置,请参阅以下示例.
通过执行以下操作获取图片ID:
sudo docker images
Run Code Online (Sandbox Code Playgroud)
假设您有一个id为"matrix-data"的图像.
使用id保存图像:
sudo docker save -o /home/matrix/matrix-data.tar matrix-data
Run Code Online (Sandbox Code Playgroud)
将映像从路径复制到任何主机.现在使用以下命令导入到本地Docker安装:
sudo docker load -i <path to copied image file>
Run Code Online (Sandbox Code Playgroud)
vit*_*ets 45
您可以使用带有DOCKER_HOST
变量的单行:
docker save app:1.0 | gzip | DOCKER_HOST=ssh://user@remotehost docker load
Run Code Online (Sandbox Code Playgroud)
Tar*_*aji 40
通过gzip命令保存和加载docker镜像的最快方法:
docker save <image_id> | gzip > image_file.tgz
Run Code Online (Sandbox Code Playgroud)
要在另一台服务器上加载压缩图像,请立即使用此命令,它将被识别为压缩图像:
docker load -i image_file.tgz
Run Code Online (Sandbox Code Playgroud)
要重命名或重新标记图像,请使用:
docker image tag <image_id> <image_path_name>:<version>
Run Code Online (Sandbox Code Playgroud)
例如:
docker image tag 4444444 your_docker_or_harbor_path/ubuntu:14.0
Run Code Online (Sandbox Code Playgroud)
Dam*_*ran 29
首先将Docker镜像保存为zip文件:
docker save <docker image name> | gzip > <docker image name>.tar.gz
Run Code Online (Sandbox Code Playgroud)
然后使用以下命令将导出的图像加载到Docker:
zcat <docker image name>.tar.gz | docker load
Run Code Online (Sandbox Code Playgroud)
Nei*_*rdi 25
跑
docker images
Run Code Online (Sandbox Code Playgroud)
查看主机上的图像列表.假设您有一张名为awesomesauce的图片.在终端中,cd
指向要将映像导出到的目录.现在运行:
docker save awesomesauce:latest > awesomesauce.tar
Run Code Online (Sandbox Code Playgroud)
将tar文件复制到拇指驱动器或其他任何内容,然后将其复制到新的主机.
现在从新主机做:
docker load < awesomesauce.tar
Run Code Online (Sandbox Code Playgroud)
现在去喝咖啡看看黑客新闻 ...
Kav*_*eri 17
保存所有图像的最佳方法是这样的:
docker save $(docker images --format '{{.Repository}}:{{.Tag}}') -o allimages.tar
Run Code Online (Sandbox Code Playgroud)
上面的代码将保存所有图像allimages.tar
并加载图像,请转到保存图像的目录并运行以下命令:
docker load -i allimages.tar
Run Code Online (Sandbox Code Playgroud)
只需确保在PowerShell中而不是在命令提示符中使用此命令
Pan*_*los 15
对于容器文件系统的扁平导出,请使用;
docker export CONTAINER_ID > my_container.tar
使用cat my_container.tar | docker import -
导入所述图像.
qui*_*997 15
真实世界的例子
#host1
systemctl stop docker
systemctl start docker
docker commit -p 1d09068ef111 ubuntu001_bkp3
#create backup
docker save -o ubuntu001_bkp3.tar ubuntu001_bkp3
#upload ubuntu001_bkp3.tar to my online drive
aws s3 cp ubuntu001_bkp3.tar s3://mybucket001/
#host2
systemctl stop docker
systemctl start docker
cd /dir1
#download ubuntu001_bkp3.tar from my online drive
aws s3 cp s3://mybucket001/ubuntu001_bkp3.tar /dir1
#restore backup
cat ./ubuntu001_bkp3.tar | docker load
docker run --name ubuntu001 -it ubuntu001_bkp3:latest bash
docker ps -a
docker attach ubuntu001
Run Code Online (Sandbox Code Playgroud)
mat*_*ann 14
使用docker-machine时,您可以mach1
在机器mach2
和机器之间复制图像pv
.
当然,你也可以坚持docker-machine config
到中间获得一个progess指标:
mach
.
您也可以省略其中一个mach
子shell,以使用当前的默认docker-host.
mach1
将图像从当前的docker-host复制到 mach2
要么
pv
从docker-machine config
当前的docker-host 复制到.
我假设您需要保存couchdb-cartridge
图像ID为7ebc8510bc2c:
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
Run Code Online (Sandbox Code Playgroud)
将archiveName映像保存到tar文件.我将用它/media/sf_docker_vm/
来保存图像.
stratos@Dev-PC:~$ docker save imageID > /media/sf_docker_vm/archiveName.tar
Run Code Online (Sandbox Code Playgroud)
复制使用archiveName.tar文件到您的新的码头工人实例任何方法工作在你的环境中,例如FTP
,SCP
等等.
docker load
在新的Docker实例上运行该命令,并指定映像tar文件的位置.
stratos@Dev-PC:~$ docker load < /media/sf_docker_vm/archiveName.tar
Run Code Online (Sandbox Code Playgroud)
最后,运行该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
Run Code Online (Sandbox Code Playgroud)
请找到这个详细的帖子.
要将映像从本地Docker安装传输到minikube VM:
docker save <image> | (eval $(minikube docker-env) && docker load)
Run Code Online (Sandbox Code Playgroud)
docker-push-ssh
是我为此场景创建的命令行实用程序。
它在服务器上设置一个临时的私有Docker注册表,从您的本地主机建立SSH隧道,推送您的映像,然后对其进行清理。
这种方法的优势docker save
(在编写大多数答案时都使用此方法)是,只有新的层被推送到服务器,从而可以更快地上传。
通常不希望使用诸如dockerhub之类的中间注册表,而且很麻烦。
https://github.com/brthor/docker-push-ssh
安装:
pip install docker-push-ssh
Run Code Online (Sandbox Code Playgroud)
例:
docker-push-ssh -i ~/my_ssh_key username@myserver.com my-docker-image
最大的警告是您必须手动将localhost添加到Docker的insecure_registries
配置中。运行该工具一次,它将给您一个提示错误:
Error Pushing Image: Ensure localhost:5000 is added to your insecure registries.
More Details (OS X): /sf/ask/2296575081/
Run Code Online (Sandbox Code Playgroud)
我应该在Mac OS的哪里设置“ --insecure-registry”标志?
所有其他答案都非常有帮助.我刚刚经历了同样的问题,并找到了一个简单的方法docker machine scp
.
自Docker Machine v0.3.0起,引入了scp将文件从一台Docker机器复制到另一台机器.如果您希望将文件从本地计算机复制到远程Docker计算机(如AWS EC2或Digital Ocean),这非常方便,因为Docker Machine正在为您处理SSH凭据.
使用以下方式保存图像docker save
:
docker save -o docker-images.tar app-web
Run Code Online (Sandbox Code Playgroud)使用docker-machine scp复制图像
docker-machine scp ./docker-images.tar remote-machine:/home/ubuntu
Run Code Online (Sandbox Code Playgroud)假设您的远程Docker机器remote-machine
和您希望tar文件所在的目录/home/ubuntu
.
加载Docker镜像
docker-machine ssh remote-machine sudo docker load -i docker-images.tar
Run Code Online (Sandbox Code Playgroud)如果您在 Windows 计算机上工作并向 Linux 计算机上传命令,例如
docker save <image> | ssh user@host docker load
Run Code Online (Sandbox Code Playgroud)
如果您使用 powershell 将不起作用,因为它似乎会在输出中添加一个附加字符。如果您使用 cmd(命令提示符)运行该命令,它将起作用。附带说明一下,您还可以使用 Chocolatey 安装 gzip,并且以下操作也可以在 cmd 中运行。
docker save <image> | gzip | ssh user@host docker load
Run Code Online (Sandbox Code Playgroud)
根据 @kolypto 的答案,这对我来说非常有用,但仅适用sudo
于 docker load:
docker save <image> | bzip2 | pv | ssh user@host sudo docker load
Run Code Online (Sandbox Code Playgroud)
或者如果您没有/不想安装光伏:
docker save <image> | bzip2 | ssh user@host sudo docker load
Run Code Online (Sandbox Code Playgroud)
无需手动压缩或类似操作。
归档时间: |
|
查看次数: |
514643 次 |
最近记录: |