将数据库包装在泊坞窗图像中

我无法得到它。 据我了解,docker集装箱是无状态的,当你停止一个集装箱时,任何状态都将丢失。 在Image中包装数据库以及数据如何保存的想法和方法是什么? 我无法在这个主题上find明确的解释。 有人可以解释基础?

在容器中运行的数据库的数据必须存储在所谓的容器容器中,或者存储在安装到容器中的主机文件夹中。

有关更多信息,请参阅文档 。

您可以通过使用Docker的卷分享function来完成 。 这是dockerize PostgreSQL的Docker官方文档。

我不确定是否有明确的解释。 这个想法是,你创build2个泊坞窗图像。 假设你正在运行Postgres,你将创build第一个图像作为你的数据容器。 你“docker运行”它,但是,它什么都不做(也许你的命令是睡眠无限,这将使docker工人快乐)。 然后,再次运行容器,这次从当前正在运行的容器中装入卷。 这将从第一个卷到第二个卷。 这里是我做的一个例子:

db容器

我首先运行的容器声明了一些将被装载到第二个容器的卷,下面是我如何运行第一个容器:

 docker run -name abdata tacodata/abroute_docker_db 

然后第二个:

 docker run -name pgsql --volumes-from abdata tacodata/abroute_docker_postgres absql 

-volumes-from的关键是从Dockerfile中首先构build图像的时候,下面是我的第一个图像中的Dockerfile:

 FROM tacodata/abroute-docker-base MAINTAINER Greg Fausak <greg@tacodata.com> RUN pip install web.py COPY PG.sql /usr/local/etc/ COPY abinit abadm.py /usr/local/bin/ VOLUME ["/var/lib/postgresql"] VOLUME ["/etc/postgresql"] VOLUME ["/run/postgresql"] ENTRYPOINT ["abinit"] 

使用这种技术,当我运行第二个图像时,执行the_first_image中的–volumes,将Dockerfile中声明的每个VOLUME从第一个图像加载到第二个图像。

从这种方法中获得的可爱的东西之一是,第一个图像可以做的事情,如创build数据库,创build用户等,所以第二个图像只需要关心运行应用程序。 在我的入口点,我设置了一个文件信号量。 当第一个图像“完成”时,它接触到一个文件,第二个图像等待创build该文件。 所以第二个图像在第一个完成之前不会开始。

长的故事更长,我和你在一起。 这简单地移动问题。 而不是在运行数据库的容器中有持久数据,我有不同的容器中的持久数据。