在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。
这里需要考虑两个速度要素:
将图像推送到容器存储库的速度有多快?
和
我的容器的新实例可以多快开始处理请求? (在弹性伸缩环境中很重要)
两者的答案是相同的:最好在创建容器时分解 .war 文件,而不是将 .war 文件复制到其中。
这有以下两个非常积极的影响:
- 它使容器版本之间的差异更小,因此您的上传时间更短。
- 这意味着,在动态扩展以满足应用程序需求时,您的新容器实例无需解压缩 .war 文件即可开始响应请求。
对于我们这些受慢上传连接负担的人来说,使用 CI 服务器甚至是云托管的 VM 来构建 docker 镜像并将其推送到 dockerhub 或其他容器注册表也是一个好主意。这样您就可以利用千兆级的上传速度。
关于java - 在 docker 镜像中部署 WAR 文件的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30252532/