我正在使用bitnami/tomcat
图像运行多个Docker容器,我想在所有实例中共享只读配置。
每个实例都将包含与特定库,数据源等相同的配置。我已经证明并测试了在物理tomcat服务器中使用的配置。我看到在运行任何实例之前,此配置已准备就绪。
应用程序可以部署到每个实例(实际上复制一次,因为配置是共享的),可以通过将WAR文件复制到指向容器中${persistence_path}/tomcat/data
文件夹的主机文件夹/bitnami
来完成。如果我使用
-v ${persistence_path}:/bitnami
问题
我正在寻找一种可重现的创建实例的方法,因此它将通过脚本或dockerfile而不是commiting a new image,因为它不能提供有关如何创建图像的可靠记录。通过使用前者,我可以避免图像在生产中损坏或丢失的可能性。
我是否可以在多个实例中共享配置,如上所述?
这是最好的方法,因为我不会在启动实例后修改任何tomcat设置,如果是这样,我可以使用新配置重新运行实例,以便更改一次并反映在每个实例中?
可以使用dockerfile而不是commands来完成吗?我认为-v
与VOLUME
完全不可互换。
答案 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
文件。
/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
因此,卷结构遵循以下模式。
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
进行复制)