您好,登錄后才能下訂單哦!
這篇文章主要講解了“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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。