与卷dockerized postgresql

docker工人对我来说比较新。 我想build立一个postgres数据库,但我想知道如何确保数据不会丢失,如果我重新创build容器。

然后我偶然发现了命名卷(不绑定卷)以及如何使用它们。 但是…在Dockerfile中,您不能使用命名卷。 例如数据:/ var / lib等。正如我理解使用Dockerfile它总是一个匿名卷。 所以每当我重新创build一个容器时,都会得到自己的新容量。

所以这里来了我的问题:

首先:如果容器得到更新或重新创build,新容器中的postgres数据库引用相同的数据,而不会丢失对以前创build的匿名卷的引用,那么如何确保容器?

其次:如何使用yml文件? 是否有可能将这种数据库容器的多个副本引用到一个卷中? (高可用性模式)?

如果有人能给我一个提示或最佳实践,那真的很棒。

先谢谢你。

看看Postgres的Dockerfile,你会发现它声明了一个卷指令:

VOLUME /var/lib/postgresql/data 

每次运行新的Postgres容器时,不指定--volume选项, --volume会自动创build一个新卷。 该卷被赋予一个随机名称。

您可以通过运行以下命令来查看所有卷:

 docker volume ls 

您还可以通过使用以下命令检查主机path来检查卷上存储在主机上的文件:

 docker volume inspect <volume-name> 

所以,当你没有为run命令指定--volume选项时, --volume为在Dockerfile中声明的所有卷创build卷。 如果您忘记命名卷并且数据不会丢失,这主要是安全的。

首先:如果容器得到更新或重新创build,新容器中的postgres数据库引用相同的数据,而不会丢失对以前创build的匿名卷的引用,那么如何确保容器?

如果您希望--volume使用相同的卷,则需要指定--volume选项。 一旦指定,docker将不会创build一个新的卷,它只会将现有卷挂载到docker命令中的指定文件夹中。

作为最佳实践,请将您的卷命名为有价值的数据。 例如:

 docker run --volume postgresData:/var/lib/postgresql/data ... 

如果您第一次运行此命令,将创build卷postgresData并在主机上备份/var/lib/postgresql/data 。 第二次运行时,主机上备份的相同数据将被装载到容器上。

其次:如何使用yml文件? 是否有可能将这种数据库容器的多个副本引用到一个卷中?

是的,卷可以在多个容器之间共享。 您可以将相同的卷安装到多个容器上,容器将使用相同的文件。 Docker撰写允许你这样做…

但是,请注意,仅限于主机的卷是由它们创build的。 在多台机器上运行容器时,需要从所有机器访问卷。 有办法或工具来实现,但他们有点复杂。 这在Docker中仍然是一个限制。