如何保存Docker容器状态

如何保存Docker容器状态,docker,Docker,我正试图了解Docker的来龙去脉,我对保存图像的前景感到困惑 我运行了基本的Ubuntu映像,安装了Anaconda Python和其他一些东西……那么现在保存进度的最佳方法是什么呢?保存、提交、导出 所有这些似乎都不像VirtualBox那样工作,它为虚拟机提供了一个明显的保存状态文件。通常的方法至少是通过:将容器的状态冻结到一个新映像中 注意:如前所述,这不是最佳实践,使用Dockerfile可以正式建模图像内容,并确保可以重建/再现其初始状态 然后,您可以使用在本地列出该图像,然后再次运

我正试图了解Docker的来龙去脉,我对保存图像的前景感到困惑

我运行了基本的Ubuntu映像,安装了Anaconda Python和其他一些东西……那么现在保存进度的最佳方法是什么呢?保存、提交、导出


所有这些似乎都不像VirtualBox那样工作,它为虚拟机提供了一个明显的保存状态文件。

通常的方法至少是通过:将容器的状态冻结到一个新映像中

注意:如前所述,这不是最佳实践,使用Dockerfile可以正式建模图像内容,并确保可以重建/再现其初始状态

然后,您可以使用在本地列出该图像,然后再次运行它

例如:

$ docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS              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

f5283438590d

$ docker images

REPOSITORY                        TAG                 ID                  CREATED             SIZE
svendowideit/testimage            version3            f5283438590d        16 seconds ago      335.7 MB


之后,您可以将图像推送到所述服务器。

对于此类场景,请使用Docker文件

使用MongoDB的Ubuntu映像示例:

FROM ubuntu
MAINTAINER Author name

RUN apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
RUN echo "deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist    10gen" | tee -a /etc/apt/sources.list.d/10gen.list
RUN apt-get update
RUN apt-get -y install apt-utils
RUN apt-get -y install mongodb-10gen

#RUN echo "" >> /etc/mongodb.conf

CMD ["/usr/bin/mongod", "--config", "/etc/mongodb.conf"]
另请参见。

可以(但不推荐)使用
docker commit
命令。
您可以查看以下清晰的示例:

虽然这会起作用,但Docker社区认为这种方法是不好的做法。最好的方法是使用Dockerfile。@AnchovyLegend我同意,并已编辑了答案,以包含您的评论,并说明清楚。@chrismarx可能是这样,但不应使用图像来存储运行时将更改的信息(如数据库)。说信息应该通过一个卷来访问。是的,我认为这肯定是生产的正确方式。但我们中的许多人只是在本地使用docker作为virtualbox的精简版本,只想保存该死的状态,就像现在一样。而且不想在本地驱动器上增加额外的卷虽然我已经知道这被认为是一种不好的做法,但我刚刚发现它非常有用,可以让我在一个小型(3h)研讨会上所做的工作保持在一个容器中,我很快就在一个软件上完成了。投了反对票,因为这并不能回答问题。此外,当重新加载映像时,对该映像上mongodb数据库的所有更改都将丢失;因为我有一个不能完全用脚本编写的系统。你需要进入并按下一系列按钮,让它进入正确的状态。我必须处理这种情况。@Rob我完全理解你的情况,但是,在理想的DevOps自动化环境中,最好尽可能避免手动干预。有人写了一些愚蠢的东西。另一个人要求我使用它。因此,您可以通过手动将容器置于所需状态并提交来实现自动化。