在部署期间将数据保持在embedded式数据

我正在考虑一个架构,我在一个Docker容器中运行的JBOSS上部署一个JavaEE Web应用程序。

  • 机器:docker(linux)
  • web服务器:jboss
  • 框架:vaadin + jpa + hibernate
  • 数据库:(这是我的问题)

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

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

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

假设(正确与否):

  1. 如果停止docker机并重新启动,数据将会丢失。

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

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

数据不应该保存在容器中,你想把它放在一个卷中。 通常,这可以是基于主机的卷,也可以将其放在命名卷或其他泊坞窗容器中。 所以在运行数据库容器时:

docker run -v pwd /dbdata:/data mydb:latest

这会将./dbdata挂载到你的容器中作为/ data,并在重新启动和升级之后继续运行。 使用基于主机的卷时,您需要手动初始化内容,不会包含通过Dockerfile在图像中创build的任何卷数据。