java - 在 docker 镜像中部署 WAR 文件的正确方法

标签 java maven jetty docker dockerfile

在docker容器中部署java项目的docker方式是什么?

我是否将 war 复制到 webapps 中:

FROM jetty:9.2.10
MAINTAINER Me "me@me.com"
ADD ./target/*.war /var/lib/jetty/webapps/ROOT.war

还是我拿爆炸的 war 文件:

FROM jetty:9.2.10
MAINTAINER Me "me@me.com"
ADD ./target/app-0.1.0.BUILD-SNAPSHOT /var/lib/jetty/webapps/ROOT

如果它是一个普通容器,通常会部署密封的 war 文件,但对于 docker,这意味着每次你做一个小的改变时都会推送一个 10-20MB 的文件,而添加爆炸的 war 只会插入差异 - .已更改的类文件。

部署爆炸 war 而不是 war 文件有什么缺点吗?

最佳答案

您实际上应该始终部署爆炸的 .war。

这里需要考虑两个速度要素:

  1. 将图像推送到容器存储库的速度有多快?

  2. 我的容器的新实例可以多快开始处理请求? (在弹性伸缩环境中很重要)

两者的答案是相同的:最好在创建容器时分解 .war 文件,而不是将 .war 文件复制到其中。

这有以下两个非常积极的影响:

  1. 它使容器版本之间的差异更小,因此您的上传时间更短。
  2. 这意味着,在动态扩展以满足应用程序需求时,您的新容器实例无需解压缩 .war 文件即可开始响应请求。

对于我们这些受慢上传连接负担的人来说,使用 CI 服务器甚至是云托管的 VM 来构建 docker 镜像并将其推送到 dockerhub 或其他容器注册表也是一个好主意。这样您就可以利用千兆级的上传速度。

关于java - 在 docker 镜像中部署 WAR 文件的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30252532/

相关文章:

http - HTTP 服务器如何处理非常大的 HTTP 请求?

java - printStackTrace() 和 toString() 之间的区别

java - 使用时区格式化日期字符串并返回日期对象

java - 有人可以检查我关于替换 .txt 文件中的数字的代码吗?我无法替换其中的数字

maven - 没有这样的字段错误: RESOURCE_PREFIX with a maven project using tess4j

Tomcat7应用程序启动失败

java - Apache karaf - 如何记录 :display a 'lot' of information?

java - 如何在 Eclipse 中构建一个没有 Maven 和 gradle 文件且存储库中没有 .jar 文件的 Java Github 项目

android - Maven依赖解析问题

servlets - 在 Jetty 关闭连接之前优雅地停止 servlet