Docker:如何保存运行实例?

我正在运行docker的一个实例,我想保存我的工作 – 文档只是不是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

当容器退出并且容器(容器应用程序)不是无状态时,容器内部所做的更改不会丢失,除非您已将数据存储与应用程序明确分开(通过从主机文件系统挂载文件夹或将数据发送到容器外的数据库)。

为了看到你的变化持久化在一个容器中,启动旧的容器( docker start ~ )而不是创build一个新的容器( docker run ~ )。

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

即。

 docker run -it --name containerName imageName 

做东西到你的容器

 docker kill containerName docker start containerName 

您将看到您的更改被保存在该容器中。

您也可以将您的容器作为图像提交,可以将其推送到registry或导出到文件。

正如文件所述 :

  • 您从Docker集线器中提取图像
  • 您使用docker run <image>在容器上运行该映像

在对容器进行更改时,不会更改基础图像,因此如果容器已停止,则这些更改不会持久。 要保留对容器所做的更改,请使用docker commit <container_id>创build一个新的映像

在Docker文档中的示例中:

 # 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的新映像的容器c3f279d17e0a上。

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

 $ docker run svendowideit/testimage:version3 

同样,容器是无状态的。 你在一个容器内做出的任何改变在容器停止时都会丢失。 即使在容器存在之后,保存数据的一种方法是使用卷 。 这样你的容器就可以访问主机文件系统中的一个目录,你可以读写。