如何在不使用存储库的情况下将Docker映像从一台机器传输到另一台机器,无论是私有还是公共的?
我在VirtualBox中创建了自己的映像,完成后,我尝试部署到其他机器上以获得实际使用。
由于它基于我自己的镜像(如Red Hat Linux),因此无法从Dockerfile中重新创建。我的dockerfile不容易移植。
有没有简单的命令可以使用?还是另一种解决方案?
如何在不使用存储库的情况下将Docker映像从一台机器传输到另一台机器,无论是私有还是公共的?
我在VirtualBox中创建了自己的映像,完成后,我尝试部署到其他机器上以获得实际使用。
由于它基于我自己的镜像(如Red Hat Linux),因此无法从Dockerfile中重新创建。我的dockerfile不容易移植。
有没有简单的命令可以使用?还是另一种解决方案?
当前回答
对于容器文件系统的扁平导出,请使用;
docker导出CONTAINER_ID>my_CONTAINER.tar
使用cat my_container.tar | docker import-导入所述图像。
其他回答
您需要将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
dockerpushssh是我为这个场景创建的命令行实用程序。
它在服务器上建立一个临时的私有Docker注册表,从本地主机建立一个SSH隧道,推送映像,然后自行清理。
与docker save相比,这种方法的好处(在编写答案时,大多数答案都使用这种方法)是,只有新的层被推送到服务器,从而导致更快的上传。
通常,使用像dockerhub这样的中间注册表是不可取的,而且很麻烦。
https://github.com/brthor/docker-push-ssh
安装:
pip install docker-push-ssh
例子:
docker推ssh-i~/my_shkeyusername@myserver.com我的码头工人形象
最大的警告是,您必须手动将本地主机添加到Docker的insecure_registrys配置中。运行该工具一次,它会给您一个信息性错误:
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上的何处设置“--不安全注册表”标志?
要将映像保存到任何文件路径或共享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>
对于容器文件系统的扁平导出,请使用;
docker导出CONTAINER_ID>my_CONTAINER.tar
使用cat my_container.tar | docker import-导入所述图像。
Run
docker images
以查看主机上的图像列表。假设您有一个名为awesome酱的图像。在终端中,cd到要导出图像的目录。现在运行:
docker save awesomesauce:latest > awesomesauce.tar
将tar文件复制到拇指驱动器或其他任何位置,然后将其复制到新的主机。
现在从新主机开始:
docker load < awesomesauce.tar
现在去喝杯咖啡,看看黑客新闻。。。