这篇文章主要讲解了“Java技术栈有什么特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java技术栈有什么特性”吧!
War包在Tomcat或Jetty下的加载方式。
JAVA应用的经典交付形态是WAR包,在Docker下使用Tomcat或Jetty来进行WAR包的部署可以有两种方式:
1 . 将WAR包放到Docker镜像中:这种好处是产生的Docker镜像自包含,发布时不需要再发布独立的WAR包。Dockerfile例子如下:
FROM jetty:7.0
MAINTAINER xyz
ADD sample.* /usr/local/jetty/webapps/
这种方法的缺点是每次更新WAR包需要重新构建Docker镜像。
2. 将WAR包作为外部数据卷挂载:不将WAR包放在镜像里,这种方法的好处是每次WAR包更新,Docker镜像不需要更新。但是需要额外的WAR包发布机制。考虑到目前应该有WAR包发布机制,此方案可能更为灵活和熟悉。但这种方案的缺点就是Docker的可移植性受到损害,因为每个环境下必须要在宿主机的指定路径下有WAR包,使得Docker可以对其进行挂载。
Caicloud的容器组的概念保证容器组中的容器可以做到:
任何时候都运行在同一个宿主机上
共享同样的外部挂载数据卷
这两个特性使得我们可以实现如下的sidecar模式:
这样取得了一箭双雕的好处:
由于没有将应用程序的WAR包构建到Jetty容器中,使得应用的版本管理和Jetty等中间件的版本管理可以分开独立地进行。例如,如果Jetty的版本需要升级,我们不需要重新构建N个镜像(假设有N个不同的应用或WAR包)。
另一方面,通过使用sidecar来“搬运”应用WAR包,我们又不用担心可移植性的问题:只要把app-sidecar容器和Jetty容器定义在一个容器组中,Caicloud会保证应用War会一直“跟着Jetty容器跑”。
上述使用War包的方法是将Docker作为软件发布的载体。有些时候开发者也会使用Docker作为本地开发的环境(在本地开发修改代码,同时在本地以Docker的形式运行当前代码)。此时需要注意的是,如果本地的代码文件是通过COPY或ADD加入到Docker镜像中,那么哪怕在Docker内使用mvn jetty:run, mvn也无法实时地反应本地文件、代码的变化。一个解决方法是通过挂载数据卷的方式来连接到本地的代码文件。
在非Docker模式下,Jetty的日志会根据Jetty的配置文件写到指定的位置,例如:/var/log/jetty。在Docker模式下,例如使用官方的Jetty镜像,这个日志文件会被完全取消,例如在Jetty 9.2.10的Dockerfile中:sed -i '/jetty-logging/d' etc/jetty.conf
这样,Jetty的日志会写到标准输出中从而被Docker或Caicloud平台进行统一的管理。
感谢各位的阅读,以上就是“Java技术栈有什么特性”的内容了,经过本文的学习后,相信大家对Java技术栈有什么特性这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。