使用dockerfile跨多个docker实例共享tomcat配置?
我正在使用使用dockerfile跨多个docker实例共享tomcat配置?,docker,Docker,我正在使用bitnami/tomcat映像运行多个Docker容器,我希望在所有实例中共享只读配置 每个实例都将包含相同的配置,如特定的库、数据源等。我已经证明并测试了在物理tomcat服务器中使用的配置。我看到这个配置可以在任何实例运行之前准备好 应用程序可以部署到每个实例(由于配置是共享的,所以实际上复制了一次),并且可以通过将WAR文件复制到主机文件夹${persistence\u path}/tomcat/data,该文件夹指向容器中的/bitnami文件夹,只要我使用 -v ${per
bitnami/tomcat
映像运行多个Docker容器,我希望在所有实例中共享只读配置
每个实例都将包含相同的配置,如特定的库、数据源等。我已经证明并测试了在物理tomcat服务器中使用的配置。我看到这个配置可以在任何实例运行之前准备好
应用程序可以部署到每个实例(由于配置是共享的,所以实际上复制了一次),并且可以通过将WAR文件复制到主机文件夹${persistence\u path}/tomcat/data
,该文件夹指向容器中的/bitnami
文件夹,只要我使用
-v ${persistence_path}:/bitnami
什么时候
问题
我正在寻找一种可复制的创建实例的方法,这样就可以通过脚本或dockerfile而不是dockerfile创建实例,因为它不能提供图像创建方式的可靠记录。通过使用前者,我避免了图像在生产过程中损坏或丢失的机会
我甚至可以在多个实例中共享配置吗
这是最好的方法吗?在实例启动后,我不会修改任何tomcat设置,如果是这样,我可以使用新配置重新运行实例,以便更改一次并反映在每个实例中
可以用dockerfile而不是一组dockerfile来完成吗?我认为
-v
与卷
不能完全互换。您可以使用
您可以从bitnami/tomcat
开始创建自己的tomcat映像,包括在映像构建时复制工件和配置。然后,您可以在运行时使用-v
选项覆盖它们
如果您想要不可变的容器(构建时数据锁定),您应该为您拥有的每个服务构建一个映像。否则,您可以使用卷绑定方法,如中所述。您可以使用 您可以从
bitnami/tomcat
开始创建自己的tomcat映像,包括在映像构建时复制工件和配置。然后,您可以在运行时使用-v
选项覆盖它们
如果您想要不可变的容器(构建时数据锁定),您应该为您拥有的每个服务构建一个映像。否则,您可以使用卷绑定方法,如。中所述,
bitnami/tomcat
映像使用一种简单的机制来决定是从卷还原数据还是初始化卷
启动时,容器将检查/bitnami/tomcat/.initialized
文件是否存在
- 如果此文件不存在:容器将配置Tomcat,并将
文件夹移动到卷中(这在第一次运行时发生)。然后,它会将原始文件夹链接到卷中的文件夹/opt/bitnami/Tomcat/{conf,data}
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
如果您想添加自己的配置,您应该在tomcat初始化发生后(运行时)覆盖/bitnami/tomcat/conf
中的默认配置,或者在构建时覆盖/opt/bitnami/tomcat/conf
中的默认配置
这意味着您可以:
- 从
扩展并将配置复制到bitnami/tomcat
/opt/bitnami/tomcat/conf
- 在运行时将配置装载到容器(到已知文件夹),并修改
文件以覆盖app entrypoint.sh
文件夹/bitnami/tomcat/conf
- 在运行时将配置复制到容器(与上面相同,但使用
进行复制)docker cp
- 至少运行一次Tomcat容器,然后用您的配置覆盖本地卷中的conf文件夹
/bitnami/tomcat/.initialized
文件是否存在
- 如果此文件不存在:容器将配置Tomcat,并将
文件夹移动到卷中(这在第一次运行时发生)。然后,它会将原始文件夹链接到卷中的文件夹/opt/bitnami/Tomcat/{conf,data}
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
如果您想添加自己的配置,您应该在tomcat初始化发生后(运行时)覆盖/bitnami/tomcat/conf
中的默认配置,或者在构建时覆盖/opt/bitnami/tomcat/conf
中的默认配置
这意味着您可以:
- 从
扩展并将配置复制到bitnami/tomcat
/opt/bitnami/tomcat/conf
- 在运行时将配置装载到容器(到已知文件夹),并修改
文件以覆盖app entrypoint.sh
文件夹/bitnami/tomcat/conf
- 在运行时将配置复制到容器(与上面相同,但使用
进行复制)docker cp
- 至少运行一次Tomcat容器,然后用您的配置覆盖本地卷中的conf文件夹