使用dockerfile跨多个docker实例共享tomcatconfiguration?
我正在运行多个具有bitnami/tomcat
映像的Docker容器,我想只在所有实例中共享只读configuration。
每个实例都将包含相同的configuration,如特定的库,数据源等。 我已经有了在物理Tomcat服务器中使用的经过validation和testing的configuration。 我看到这个configuration可以在任何实例运行之前做好准备。
可以将应用程序部署到每个实例(在configuration共享后实际复制一次),并且可以通过将WAR文件复制到指向容器中的/bitnami
文件夹的主机文件夹${persistence_path}/tomcat/data
来/bitnami
-v ${persistence_path}:/bitnami
运行实例时 。
这个问题
我正在寻找一种可重复的创build实例的方法,以便通过脚本或者dockerfile来创build实例,而不是提交新图像 ,因为它不能提供如何创build图像的可靠logging。 通过使用前者,我避免了图像腐败或生产中丢失的机会。
如上所述,我可以在多个实例中共享configuration吗?
这是最好的方法,因为我不会在实例启动后修改任何tomcat设置,如果是这样的话,我可以重新运行新configuration的实例,以改变一次,并反映在每个实例?
可以用dockerfile而不是一组命令来完成吗? 我不认为-v
与VOLUME
完全可以互换。
您可以使用-v
的:ro
选项将目录挂载为只读目录
docker run -v /your/host/dir:/bitnami:ro YOUR_IMAGE
您可以从bitnami/tomcat
开始创build自己的tomcat映像,包括在映像构build时复制工件和configuration。 然后,您可以使用-v
选项在运行时覆盖它们。
如果你想要不可变的容器(构build时间数据被locking),你应该为每个服务构build一个映像。 否则,您可以使用卷绑定方法,如图像描述中所述 。
bitnami/tomcat
映像使用简单的机制来决定是从卷恢复数据还是初始化卷。
启动时容器将检查/bitnami/tomcat/.initialized
文件是否存在。
- 如果此文件不存在 :容器将configurationTomcat,并将
/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
如果你想添加自己的configuration,你应该在Tomcat初始化发生时(运行时)覆盖/opt/bitnami/tomcat/conf
中的默认configuration, /opt/bitnami/tomcat/conf
在构build时覆盖/opt/bitnami/tomcat/conf
中的默认configuration。
这意味着你可以:
- 从
bitnami/tomcat
扩展,并将您的configuration复制到/opt/bitnami/tomcat/conf
。 - 在运行时将configuration挂载到容器(到已知文件夹),并修改
app-entrypoint.sh
文件以覆盖/bitnami/tomcat/conf
文件夹。 - 在运行时将configuration复制到容器(与上面相同,但是使用
docker cp
复制) - 至less运行一次Tomcat容器,然后使用您的configuration覆盖本地卷中的conf文件夹。
- 如何使用Docker Dockerfile来启用postgreSQL映像postGIS
- 在Docker中运行Jenkins时出错
- GitLab CI sshregistrylogin
- 是否有可能通过dockerFile构build图像时从.env文件获取值
- 使用nginx作为docker的代理
- 如何在PHP泊坞窗图像安装pdo驱动程序?
- 在作为自定义用户运行的Docker中运行ASP.NET Core应用程序
- dompdf / dompdf v0.7.0需要ext-gd * – >请求的PHP扩展gd缺失,laravelcomposer php安装与docker工人
- 如何cachingJenkins Docker SSH Slave(Gradle)的下载依赖关系