如何保存 Docker 容器状态

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

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

它们的工作方式似乎都与 VirtualBox 不同,VirtualBox 为您的虚拟机提供了一个明显的保存状态文件。

126365 次浏览

The usual way is at least through a docker commit: that will freeze the state of your container into a new image.

注意: 由于 凤尾鱼传说评论,这不是最佳实践,并且使用 Dockerfile 允许您正式建模图像内容,并确保您可以重建/重现其初始状态。

然后,您可以使用 docker images在本地列出该映像,并再次运行它。

Example:

$ 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 文件。

An example case for an Ubuntu image with MongoDB:

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"]

也请参阅 编写 Dockerfiles 的最佳实践

通过使用 docker commit命令可以实现(但不推荐)。
你可参考以下清晰的例子:
Https://phoenixnap.com/kb/how-to-commit-changes-to-docker-image

The usual way is at least through a docker commit: that will freeze the state of your container into a new image.

但是要知道,没有可靠的方法来“保存状态”的容器不同于虚拟机保存状态在 Hyper-V 或 VMware。这也是 Docker 的一个缺点。

它似乎只保存对持久性文件更改所做的更改。因此,当您从新映像再次旋转容器时,所执行的依赖项和所有运行命令将不会产生相同的效果。

这就是为什么理想情况下需要修改 docker 文件,简而言之,在 docker 系统中没有像我们在虚拟机中那样的保存状态特性。内存内容总是丢失。