标记为的OpenLiberty Docker 映像full
包含server.xml
仅启用该javaee-8.0
功能的 a。那些标记为microProfile3
仅启用microProfile-3.0
的。
我想要两者......甚至更好:我希望在开发时启用所有功能;我会在需要时优化性能,即可能根本不需要。
有没有比在启用这两个功能的情况下构建另一个图像更简单的方法?
标记为的OpenLiberty Docker 映像full
包含server.xml
仅启用该javaee-8.0
功能的 a。那些标记为microProfile3
仅启用microProfile-3.0
的。
我想要两者......甚至更好:我希望在开发时启用所有功能;我会在需要时优化性能,即可能根本不需要。
有没有比在启用这两个功能的情况下构建另一个图像更简单的方法?
在 Liberty 中一次启用所有功能是不可能的,因为许多功能故意相互冲突。例如,您不能同时加载同一功能的两个不同版本(例如servlet-3.1
和servlet-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
)。
您可以将标签视为图像中包含哪些功能的指标,而不是默认启用的功能。换句话说,“完整”具有所有可用功能,无需安装即可启用,而“microProfile3”仅安装了 microProfile-3 功能。请注意,一些包,如 javaee8,不仅包含单个功能,还提供了用户可能需要与该单个功能一起使用的其他功能(尽管默认情况下仅启用该功能)。您可以在此处查看要打包的功能细分
Andy 的回答解释了为什么您不能一次启用所有功能(冲突)。关于是否有一种启用这两种功能的简单方法来构建,我建议从“完整”开始并更新 Dockerfile 以将具有这两种功能(以及您想要的任何其他功能)的 server.xml 复制到 /config。就像您在问题中提到的那样,这对于开发来说很好,但是您不想将其用于生产,因为它会包含许多您未使用的额外功能。对于生产,您希望使用相反的方法并从最小的映像(可能是内核)开始,并仅添加您的应用程序/服务器需要的功能,以确保适合用途的运行时。