2016-04-24 104 views
1

我正在运行一个docker实例,我想to save my work - 文档只是不是100%清楚如何做到这一点,所以我在这里问。我打开码头实例使用:Docker:如何保存运行实例?

docker run -it [public dockerhub name] 

现在我想保存我所有的工作在本地,以便我可以回到它。我不特别想检查到dockerhub,除非这是可取的。

这是我所做的。我打开了一个新的docker CLI选项卡,并在那里完成docker ps以查找正在运行的docker实例的ID。然后在同一个标​​签中,我尝试这样做:

docker commit <docker-id> me/myinstance 

这给了我一个提交散列。

我现在可以安全地退出正在运行的docker实例吗?我将使用什么命令再次打开它 - 是否需要存储提交哈希,或者我可以只做docker run -it me/myinstance

+0

是的只是使用这个命令,它会从你刚刚创建的图像中创建一个新的容器,其中包含你的预览修改版本 – CodeNotFound

+0

@CodeNotFound谢谢,我可以使用'docker run -it me/myinstance'再次运行它吗? – Richard

回答

1

在容器内造成的改变丢失当容器出口和容器(容器应用)是不是无状态的,除非已明确从应用程序分开的数据存储(通过从主机的文件系统安装文件夹或将数据发送到一个容器外的数据库)。

要查看您的更改是否保留在容器中,请启动旧容器(docker start ~)而不是创建新容器(docker run ~)。

如果您命名容器,这样做更容易。

即。

docker run -it --name containerName imageName 

做的东西,您的容器

docker kill containerName 
docker start containerName 

你会看到你的变化是在该容器仍然存在。

您也可以将您的容器提交为图像,该图像可以推送到注册表或导出到文件。

0

由于docs提到:

  • 你拉离泊坞枢纽的图像
  • 您使用docker run <image>

的容器上运行图像当您更改到一个容器,你”不要更改底层图像,因此如果容器停止,那么这些更改不会持久。要保留您对容器所做的更改,将创建docker commit <container_id>

一个新的图像是在泊坞文档的例子:

# What containers are running on my system? 
$ docker ps 

ID     IMAGE    COMMAND    CREATED 
c3f279d17e0a  ubuntu:12.04  /bin/bash   7 days ago 
197387f1b436  ubuntu:12.04  /bin/bash   7 days ago 

# Create a new image called svendowideit/testimage, tag it as "version3" 
$ docker commit c3f279d17e0a svendowideit/testimage:version3 
f5283438590d 

# What images do I have on my system? 
$ docker images 
REPOSITORY      TAG     ID 
svendowideit/testimage   version3   f5283438590d 

这样一来,你已经坚持了变化容器c3f279d17e0a ,在一张​​名为svendowideit/testimage:version3的新图片上。

现在你有一个像你的修改,所以,只要你想的容器上,你可以运行它多次:

$ docker run svendowideit/testimage:version3 

同样,容器是无状态的。您在容器内进行的任何更改会在容器停止时丢失。即使在容器存在之后仍然存在数据的一种方法是using volumes。这样你的容器就可以访问主机文件系统中的一个目录,你可以读写。

+0

作为警告:请注意,docker commit'不会**适用于'Dockerfile'的'VOLUME'部分列出的任何卷,除非您使用'-v'选项映射它们。我从令人沮丧的经历中发言,直到我发现这隐藏在官方文档的某处。 – Marakai