启用了*所有*功能的 OpenLiberty Docker 图像

OpenLiberty Docker image with *all* features enabled

标记为 fullOpenLiberty Docker Images 包含仅启用 javaee-8.0 功能的 server.xml。标记为 microProfile3 的那些仅启用 microProfile-3.0.

我想要两者...甚至更好:我想在开发时只启用 所有 功能;我会在需要时优化性能,即可能根本不需要。

有没有比构建另一个启用这两个功能的图像更简单的方法?

不可能在 Liberty 中一次启用所有功能,因为许多功能有意相互冲突。例如,您不能同时加载同一功能的两个不同版本(例如 servlet-3.1servlet-4.0

通过执行以下操作,您可以非常简洁地同时启用所有最新的 JavaEE 和 MicroProfile 功能:

<server>
  <featureManager>
    <feature>javaee-8.0</feature>
    <feature>microProfile-3.2</feature>
  </featureManager>
</server>

这样做会提供相当多的功能(超过单个应用程序通常需要的功能)。这两个总括功能中未包含的功能非常专业,例如 JCache 会话持久性 (sessionCache-1.0) 或事件日志记录 (eventLogging-1.0)。

您可以将标签视为图像中包含哪些功能的指标,而不是默认启用的功能。换句话说,'full' 具有所有可用功能,无需安装即可启用,而 'microProfile3' 仅安装了 microProfile-3 功能。请注意,某些软件包(如 javaee8)不仅仅包含单个功能,因为它还提供用户可能需要与该单个功能一起使用的其他功能(尽管默认情况下仅启用该功能)。您可以查看要打包的功能细分 here

Andy 的回答解释了为什么您不能一次启用所有功能(冲突)。关于是否有一种启用这两种功能的简单方法,我建议从 'full' 开始并更新 Dockerfile 以复制具有这两种功能(加上您想要的任何其他功能)的 server.xml 到/配置。就像您在问题中提到的那样,这对于开发来说很好,但是您不想在生产中这样做,因为它会包含许多您没有使用的额外功能。对于生产,您希望使用相反的方法并从最小的图像(可能是内核)开始,并仅添加您的 application/server 需要的功能,确保适合目的的运行时。