Py学习  »  docker

Docker::如何在没有Docker Hub的情况下将Docker映像从一个Mac系统传输到另一个Mac系统[复制]

Deb • 5 年前 • 1786 次点击  

无论是私有的还是公共的,我如何在不使用存储库的情况下将Docker映像从一台机器传输到另一台机器?

我习惯于在virtualbox中播放和创建自己的映像,当它完成后,我会尝试部署到其他机器上以获得真正的使用。

由于它基于自己的映像(如RedHatLinux),因此无法从Dockerfile中重新创建。

我可以使用简单的命令吗?或者其他解决方案?

保存/导出似乎可以达到类似的目的,请参见 What is the difference between save and export in Docker? 我更喜欢 save 我的案子的命令。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39148
 
1786 次点击  
文章 [ 14 ]  |  最新文章 5 年前
Peter Mortensen Greg Roberts
Reply   •   1 楼
Peter Mortensen Greg Roberts    6 年前

这就是如何在两个远程寄存器/存储库之间移动Docker映像。它与Docker版本1.10.2,构建c3959b1一起工作。

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服务,这是一种方便的方法。

Vikram
Reply   •   2 楼
Vikram    6 年前

我想移动所有带标签的图像。

```
OUT=$(docker images --format '{{.Repository}}:{{.Tag}}')
OUTPUT=($OUT)
docker save $(echo "${OUTPUT[*]}") -o /dir/images.tar
``` 

说明:

弗斯特 OUT 获取所有标记,但用新行分隔。第二 OUTPUT 获取数组中的所有标记。第三 $(echo "${OUTPUT[*]}") 将单个的所有标记 docker save 命令使所有图像都在一个tar中。

此外,还可以使用gzip对其进行压缩。按目标运行:

tar xvf images.tar.gz -O | docker load

-O 选择 tar 将内容放在可被 docker load .

Chu
Reply   •   3 楼
Chu    7 年前

你可以用 sshfs :

$ sshfs user@ip:/<remote-path> <local-mount-path>
$ docker save <image-id> > <local-mount-path>/myImage.tar
Peter Mortensen Greg Roberts
Reply   •   4 楼
Peter Mortensen Greg Roberts    6 年前

所有其他答案都非常有用。我刚刚经历了同样的问题,并想出了一个简单的方法 docker machine scp .

由于docker machine v0.3.0,引入了scp将文件从一台docker machine复制到另一台docker machine。如果您希望将文件从本地计算机复制到远程Docker计算机(如AWS EC2或Digital Ocean),这非常方便,因为Docker计算机正在为您处理ssh凭据。

  1. 使用保存图像 docker save 像:

    docker save -o docker-images.tar app-web
    
  2. 复制图像使用 docker-machine scp

    docker-machine scp ./docker-images.tar remote-machine:/home/ubuntu
    

假设您的远程Docker机器是 remote-machine 您希望tar文件的目录是 /home/ubuntu .

  1. 加载Docker映像

    docker-machine ssh remote-machine sudo docker load -i docker-images.tar
    
brthornbury
Reply   •   5 楼
brthornbury    6 年前

docker-push-ssh 是仅用于此方案的命令行实用程序。

它在服务器上建立了一个临时的私有Docker注册表,在本地主机上建立了一个ssh通道,推送您的映像,然后自己清理。

这种方法的好处 docker save (在编写大多数答案时,使用这种方法)是只将新层推送到服务器,从而使上载更快。

通常使用中间注册表(如DockerHub)是不可取的,而且很麻烦。

https://github.com/brthor/docker-push-ssh

安装:

pip install docker-push-ssh

例子:

docker-push-ssh -i ~/my_ssh_key username@myserver.com my-docker-image

最大的警告是您必须手动将本地主机添加到Docker的 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?

Peter Mortensen Greg Roberts
Reply   •   6 楼
Peter Mortensen Greg Roberts    6 年前

要将本地Docker安装的图像传输到Minikube虚拟机,请执行以下操作:

docker save <image> | (eval $(minikube docker-env) && docker load)
Peter Mortensen Greg Roberts
Reply   •   7 楼
Peter Mortensen Greg Roberts    6 年前

我想你需要保存 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

将archivename映像保存到tar文件中。我会用 /media/sf_docker_vm/ 保存图像。

stratos@Dev-PC:~$ docker save imageID > /media/sf_docker_vm/archiveName.tar

例如,使用在您的环境中工作的任何方法,将archivename.tar文件复制到新的docker实例中。 FTP , SCP 等。

运行 docker load 命令并指定映像tar文件的位置。

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

请找到这个 detailed post .

John Kugelman
Reply   •   8 楼
John Kugelman    6 年前

使用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-machine config 子shell,使用当前默认Docker主机。

docker save <image> | docker $(docker-machine config <mach>) load

将图像从当前Docker主机复制到 mach

docker $(docker-machine config <mach>) save <image> | docker load

从中复制 机器 到当前的Docker主机。

vitaut Panagiotis Moustafellos
Reply   •   9 楼
vitaut Panagiotis Moustafellos    9 年前

对于容器文件系统的扁平导出,请使用;

docker export CONTAINER_ID > my_container.tar

cat my_container.tar | docker import -

Peter Mortensen Greg Roberts
Reply   •   10 楼
Peter Mortensen Greg Roberts    6 年前

docker images

查看主机上的图像列表。假设你有一个叫 冬虫夏草酱 . 在你的终端, cd 到要将图像导出到的目录。现在运行:

docker save awesomesauce:latest > awesomesauce.tar

将tar文件复制到拇指驱动器或其他驱动器,然后将其复制到新的主机。

现在从新主机开始:

docker load < awesomesauce.tar

现在去喝杯咖啡看书 Hacker News

Peter Mortensen Greg Roberts
Reply   •   11 楼
Peter Mortensen Greg Roberts    6 年前

首先将Docker映像保存到zip文件:

docker save <docker image name> | gzip > <docker image name>.tar.gz

然后使用以下命令将导出的图像加载到Docker:

zcat <docker image name>.tar.gz | docker load
Peter Mortensen Greg Roberts
Reply   •   12 楼
Peter Mortensen Greg Roberts    6 年前

要将映像保存到任何文件路径或共享的NFS位置,请参见以下示例。

通过执行以下操作获取图像ID:

sudo docker images

假设你有一个ID为“矩阵数据”的图像。

用ID保存图像:

sudo docker save -o /home/matrix/matrix-data.tar matrix-data

将映像从路径复制到任何主机。现在导入到本地Docker安装,使用:

sudo docker load -i <path to copied image file>
marco.m kolypto
Reply   •   13 楼
marco.m kolypto    6 年前

通过ssh传输docker映像,bzipping内容在运行中:

docker save <image> | bzip2 | \
     ssh user@host 'bunzip2 | docker load'

这也是个好主意 pv 在管道中间查看传输情况:

docker save <image> | bzip2 | pv | \
     ssh user@host 'bunzip2 | docker load'

(有关的详细信息 光伏发电 : home page , man page )

Vishrant
Reply   •   14 楼
Vishrant    6 年前

您需要将Docker映像保存为tar文件:

docker save -o <path for generated tar file> <image name>

然后使用常规的文件传输工具(如 cp scp . 之后,您必须将图像加载到Docker中:

docker load -i <path to image tar file>

附:你可能需要 sudo 所有命令。

编辑: 您应该使用-o添加文件名(不只是目录),例如:

docker save -o c:/myfile.tar centos:16