在部署期间将数据保留在嵌入式数

时间:2016-06-07 11:56:50

标签: hibernate docker jboss h2 derby

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

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

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

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

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

假设(正确与否):

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

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

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

1 个答案:

答案 0 :(得分:1)

数据不应保存在容器中,您要将其放在卷内。通常,这可能是基于主机的卷,也可以将其放在命名卷或其他docker容器中。所以在运行数据库容器时:

docker run -v {PWD {1}}

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