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