使用dockerfile在多个docker实例之间共享tomcat配置?

时间:2017-09-27 16:26:54

标签: docker

我正在使用bitnami/tomcat图像运行多个Docker容器,我想在所有实例中共享只读配置。

每个实例都将包含与特定库,数据源等相同的配置。我已经证明并测试了在物理tomcat服务器中使用的配置。我看到在运行任何实例之前,此配置已准备就绪。

应用程序可以部署到每个实例(实际上复制一次,因为配置是共享的),可以通过将WAR文件复制到指向容器中${persistence_path}/tomcat/data文件夹的主机文件夹/bitnami来完成。如果我使用

-v ${persistence_path}:/bitnami

running the instance

问题

我正在寻找一种可重现的创建实例的方法,因此它将通过脚本或dockerfile而不是commiting a new image,因为它不能提供有关如何创建图像的可靠记录。通过使用前者,我可以避免图像在生产中损坏或丢失的可能性。

我是否可以在多个实例中共享配置,如上所述?

这是最好的方法,因为我不会在启动实例后修改任何tomcat设置,如果是这样,我可以使用新配置重新运行实例,以便更改一次并反映在每个实例中?

可以使用dockerfile而不是commands来完成吗?我认为-vVOLUME完全不可互换。

2 个答案:

答案 0 :(得分:1)

您可以使用the :ro option of -v

以只读方式挂载目录
docker run -v /your/host/dir:/bitnami:ro YOUR_IMAGE

您可以从bitnami/tomcat开始创建自己的tomcat图像,包括在图像构建时复制工件和配置。然后,您可以使用-v选项在运行时覆盖它们。

如果您想要不可变容器(锁定构建时间数据),您应该为每个服务构建一个映像。否则,您可以使用卷绑定方法,如image description

中所述

答案 1 :(得分:1)

bitnami/tomcat图像使用一种简单的机制来决定是从卷还原数据还是初始化卷。

启动时,容器将检查是否存在/bitnami/tomcat/.initialized文件。

  • 如果此文件不存在:容器将配置Tomcat并将/opt/bitnami/tomcat/{conf,data}文件夹移动到卷(这在第一次运行时发生)。然后,它会将原始文件夹链接到卷中的文件夹。

首次运行后的Tomcat文件夹:

root@2346ab1f5c88:/# ls -la /opt/bitnami/tomcat/{conf,data}
lrwxrwxrwx 1 root root 20 Sep 28 13:49 /opt/bitnami/tomcat/conf -> /bitnami/tomcat/conf
lrwxrwxrwx 1 root root 20 Sep 28 13:49 /opt/bitnami/tomcat/data -> /bitnami/tomcat/data
  • 如果此文件确实存在:容器只会将Tomcat conf和data文件夹链接回卷中的文件夹(可能还有修复权限)。

因此,卷结构遵循以下模式。

root@2346ab1f5c88:/# tree -L 1 -a /bitnami/tomcat
/bitnami/tomcat
├── conf
├── data
└── .initialized

2 directories, 1 file

如果要添加自己的配置,则应在{/ 1}} 之后覆盖默认配置发生Tomcat初始化(在运行时)或覆盖{{1}中的默认配置在构建时。

这意味着您可以:

  • /bitnami/tomcat/conf延伸并将您的配置复制到/opt/bitnami/tomcat/conf
  • 在运行时将配置挂载到容器(到已知文件夹)并修改bitnami/tomcat文件以覆盖/opt/bitnami/tomcat/conf文件夹。
  • 在运行时将配置复制到容器(与上面相同,但使用app-entrypoint.sh进行复制)
  • 至少运行一次Tomcat容器,然后使用您的配置覆盖本地卷中的conf文件夹。