如何导入导出Docker Compose?

8
我还不是很熟悉Docker和所有容器相关的内容。我有一个服务器可以完全访问,在1.1.1.1上安装了Docker(没有Docker Compose)。在另一个地方,我的朋友有一个2.2.2.2服务器,他在那里安装了Docker和Docker Compose。
在2.2.2.2服务器上,我的朋友构建了3个容器:容器A(Git),容器B(未知),容器C(未知)。我可以通过浏览器访问容器A(Git)的内容。
我的问题是:我能将容器A导入到我在1.1.1.1的服务器上吗?我有用户访问权限来下载Git,但我想要的是导入容器,而不是Git(容器内部的内容)。有什么提示吗?我应该怎么做?如果我没有命令控制台的访问权限,这是否不可能实现?
3个回答

10
如果你想要移动正在运行的容器实例,我建议你运行以下命令。
$ docker ps
 CONTAINER ID    IMAGE             COMMAND       CREATED       STATUS       NAMES
 c3f279d17e0a   ubuntu:12.04      /bin/bash      7 days ago    Up 25 hours desperate_dubinsky
 197387f1b436   ubuntu:12.04      /bin/bash      7 days ago    Up 25 hours focused_hamilton

$ docker commit c3f279d17e0a  svendowideit/testimage:version3

这将在主机上创建图像,然后运行下面的命令将图像保存为tar文件以便上传到另一个主机。

$ docker save -o testimage.tar svendowideit/testimage:version3

在将tar镜像通过scp传输到另一台主机后,运行以下命令以提取tar并将其保存为docker镜像。

 $ docker images
 REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

 $ docker load --input testimage.tar
 Loaded image: svendowideit/testimage:version3

 $ docker images
 REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
 svendowideit/testimage version3            769b9341d937        7 weeks ago         2.489 MB

现在你可以使用docker run命令启动保存的镜像实例。


1
亲爱的@Viswesn,非常感谢您。那非常有帮助。感谢您的指导。还有一些额外的问题,如果我想保存Docker镜像,我应该停止Docker服务吗?如果在Docker运行时可以,它会对使用它的人产生影响吗?(例如变慢或其他什么?) - ivanprakasa
我们可以在不停止 Docker 的情况下安全地运行 Docker save,但要确保新的 Docker 能够使用新的挂载卷或环境;例如,如果您对 MySQL 数据库进行了 Docker save,则 MySQL 数据应该被挂载在主机上;对于将要使用 MySQL 启动的新 Docker,应该使用新的卷目录,这样它就会从头开始创建东西。因此,这取决于它是什么以及您计划如何部署您的 IaaS。 - Viswesn
知道了...非常感谢。 - ivanprakasa

2

运行中的容器可以导出到一个tar归档文件中,该文件可以复制到另一台计算机并导入回来。

在运行容器的计算机上,执行以下操作:

docker export --output "A.tar" <container-A> 

请将生成的压缩文件A.tar复制到您的机器上,并进行导入:
docker import A.tar <container-A-image>

这将在您的计算机上创建一个镜像,然后可以使用docker run ...启动它。


亲爱的 @yamenk,非常感谢。如果我在容器 A 中导出,我需要停止 Docker 服务吗?还是可能在 Docker 运行时进行导出? - ivanprakasa
容器在导出时可以运行,无需停止服务。 - yamenk

-1

不行。如果你想要使用用于运行容器A(Git)的镜像,那么你的朋友必须将Docker镜像推送到Docker注册表中。这将使您有可能在服务器上运行与Docker容器相同的Docker镜像。但是数据不会被包括在内。

Docker镜像是按设计不可变的。启动的Docker镜像称为Docker容器。基本上,如果您停止并删除它们,这些Docker容器将被完全删除。如果您有需要保留的数据,则可以使用所谓的绑定卷,例如。

你看,你的问题非常广泛。虽然有实现你想要的方法,但我只能指向一些文档以供进一步参考。或者你可以加入当地的聚会,这将是最快的方式来加入。

https://www.slideshare.net/Docker/introduction-to-docker-2017

https://docs.docker.com/

https://events.docker.com/


亲爱的@kleinsasserm 非常感谢您的见解。 我明白了。正如我从搜索和学习中所想的那样,如果我的朋友不推送或分享图片,这是不可能的。 非常感谢。 - ivanprakasa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接