使用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}
    文件夹移动到卷中(这在第一次运行时发生)。然后,它会将原始文件夹链接到卷中的文件夹
第一次运行后的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
如果您想添加自己的配置,您应该在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映像使用一种简单的机制来决定是从卷还原数据还是初始化卷

启动时,容器将检查
/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
如果您想添加自己的配置,您应该在tomcat初始化发生后(运行时)覆盖
/bitnami/tomcat/conf
中的默认配置,或者在构建时覆盖
/opt/bitnami/tomcat/conf
中的默认配置

这意味着您可以:

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