在部署期间将数据保持在embedded式数据
我正在考虑一个架构,我在一个Docker容器中运行的JBOSS上部署一个JavaEE Web应用程序。
- 机器:docker(linux)
- web服务器:jboss
- 框架:vaadin + jpa + hibernate
- 数据库:(这是我的问题)
由于这是一个非常简单的应用程序,我正在考虑使用像derby或h2这样的embedded式数据库。
但是,如果需要部署此应用程序的新版本,则必须保留数据库内的数据。
所以,这是一个相当愚蠢的问题,但我需要确认我的假设是正确的。
假设(正确与否):
-
如果停止docker机并重新启动,数据将会丢失。
-
如果我保持Docker容器运行并部署新版本的* .WAR文件,则不会丢失任何数据
-
我可以创build一个sql脚本在启动时运行并填充数据库,但所有用户生成的数据都将丢失。
数据不应该保存在容器中,你想把它放在一个卷中。 通常,这可以是基于主机的卷,也可以将其放在命名卷或其他泊坞窗容器中。 所以在运行数据库容器时:
docker run -v
pwd /dbdata:/data mydb:latest
这会将./dbdata挂载到你的容器中作为/ data,并在重新启动和升级之后继续运行。 使用基于主机的卷时,您需要手动初始化内容,不会包含通过Dockerfile在图像中创build的任何卷数据。