在部署期间将数据保存在嵌入式数据库中

Keep Data on Embedded database during deploy

我正在考虑在 JBOSS 运行 上的 docker 容器内部署 JavaEE Web 应用程序的架构。

由于它是一个非常简单的应用程序,我正在考虑使用像 derby 或 h2 这样的嵌入式数据库。

但是,如果需要部署此应用程序的新版本,则必须保留数据库中的数据。

所以,这是一个相当愚蠢的问题,但我需要确认我的假设是正确的。

假设(正确与否):

  1. 如果我停止 docker 机器并再次启动它,数据将会丢失。

  2. 如果我保留 docker 容器 运行ning 并部署新版本的 *.WAR 文件,则不会丢失任何数据

  3. 我可以在启动时创建一个 sql 脚本到 运行 并填充数据库,但是所有用户生成的数据都将丢失。

数据不应该保存在容器中,您想将它放在一个卷中。通常,这要么是基于主机的卷,要么您可以将其放置在命名卷或另一个 docker 容器中。所以当运行数据库容器:

docker run -vpwd/dbdata:/data mydb:latest

这会将容器内的 ./dbdata 挂载为 /data 并在重启和升级后继续存在。对于基于主机的卷,您需要手动初始化内容,它不会包含通过 Dockerfile 在映像内部创建的任何卷数据。