轉帖|行業資訊|編輯:龔雪|2015-10-14 09:46:57.000|閱讀 447 次
概述:Java語言長期占據編程語言前三甲的位置,其受歡迎程度與重要性不言而喻。在容器化技術大潮中,Java可揚容器化之長,避自身“臃腫”之短,取得更高成就。本文選擇了5個有代表性的Java鏡像進行了介紹,并指出了其現存的一些問題和解決方案,供相關人員參考。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Java語言長期占據編程語言前三甲的位置,其受歡迎程度與重要性不言而喻。在容器化技術大潮中,Java可揚容器化之長,避自身“臃腫”之短,取得更高成就。本文選擇了5個有代表性的Java鏡像進行了介紹,并指出了其現存的一些問題和解決方案,供相關人員參考。
盡管Java看起來不是很“時髦”,但仍是一門在移動市場、開源界及企業中占據主導地位的非常受歡迎的重要的語言。舉個例子,你可知道在Apache軟件基金會中63%的項目是用Java寫的么?幸運的是,在容器技術發展進程中,Java開發人員并未被冷落。本文將著重介紹五個流行的基于Java的Docker鏡像與配置,以及他們如何能幫助你的團隊更有效地工作。
Stash是個Git代碼管理和協作工具。Stash允許將部署節點集群化,從而減少活動主機的停機時間,且不會對每個添加的節點造成性能影響。Stash還集成了JIRA(同一公司出品)的可追溯能力,并為團隊提供協作工具,具有類似這樣的功能:當一個pull請求處于打開狀態時,代碼被修改將觸發警報。
如果你想將Git遠程主機從一個Stash實例遷移到另一個Stash實例,請注意雖然可以把倉庫復制過去,pull請求卻是無法被復制過去的,你也不能在實例間遷移。不過,Stash的開發團隊會在將來添加這些功能。在生成JIRA數據庫結構時,請注意JIRA 6.1 EAP 3包含了重大修改,可能會造成插件停止工作。Stash可以限制對重要代碼分支的寫權限,防止新成員誤操作。Stash允許開發人員將代碼提交到自己的服務器端倉庫上,然后由項目管理者審核并合并到主項目倉庫中。在Stash中開始一個新項目時,項目管理者應從一個全新的倉庫入手:
ssh user@host
git init --bare /path/to/repo.git
所有其他成員需要通過SSH進入這個倉庫,并將其復制到服務器的另一個地方。Stash稱之為“分流流程”(Forking Workflow),這對于來自SVN背景的人有點不同尋常。
Tomcat是個實現了Oracle的Java Servlet及JSP規范的開源Web服務器及Servlet容器。它提供了一個標準的HTTP環境用于運行代碼。在最簡配置時,Tomcat運行于單一的系統進程中。在舊機器上工作的開發人員通過容器安裝Tomcat將不需要完整的虛擬機環境,從而騰出資源。
對運行Linux虛擬機的用戶而言,在Docker容器中運行Tomcat的性能可能會非常差,容器的啟動速度很慢或非常卡。如果宿主系統是Linux,可以使用熵收集守護進程(Entropy Gathering Daemon,簡稱EDG)來解決這個問題。如果是使用Boot2Docker,由于Boot2Docker的Tiny Core Linux擴展中沒有EGD,這個問題將尤為突出。將宿主的/dev/urandom裝載成容器的/dev/random可作為臨時解決方法。
Apache Hadoop是個用于將大數據集分布到大量計算機中的開源框架。Hadoop被設計成可以從一臺主機擴展到數萬臺。Hadoop不依賴硬件來達成容錯,可在應用層面處理失敗。Hadoop框架由四個模塊組成:Hadoop Common、Hadoop分布式文件系統(HDFS)、Hadoop YARN及Hadoop MapReduce。此外,還有一些Hadoop相關的項目,包括ZooKeeper和Spark。
如果你試圖創建多節點集群用于在Docker中運行Hadoop,你可能會碰到一些麻煩。容器間網絡可通過Weave或SequenceIQ的新項目Cloudbreak來構建。Cloudbreak可以很容易地在不同的云供應商(比如AWS)上創建Hadoop集群。
用戶還遇到過在Hadoop中運行pyspark(Python中使用的一個Spark編程模型)的困難。嘗試以非root用戶保存數據幀(dataframe)會失敗。重置$SPARK_USER為root也無事于補,因為spark子節點都是作為root運行的。如果你的項目不需要權限系統,可使用用戶郵件列表的這個方式來解決。
Apache Maven是個圍繞“項目對象模型”(Project Object Model,簡稱POM)概念的軟件項目管理工具。Maven據此從一個中央信息源來管理項目的構建、文檔或報告。Maven還提供了開發期工具,提供項目的郵件列表、代碼控制器的變更日志、依賴列表或單元測試報告。
在運行Maven的Docker插件時,有個錯誤:如果用戶沒有指定命令,一個空的CMD會被輸出。對于那些想讓容器繼承父容器的信息的用戶而言,會很受挫。使用官方Docker鏡像可緩解這些問題。如果你的服務器運行著Jenkins,用于創建發布版或快照的設置選項在處理mvn命令的Docker參數時很快會變成一個麻煩。Jenkins的Maven發布插件會自動配置pom.xml并部署快照。
Glassfish是個開源應用服務器,支持EJB、JPA、JSF、JMI、JSP等等。Glassfish讓開發人員能夠創建可擴展、可移植并可與傳統技術整合的應用。用戶可以安裝附加組件以訪問其他服務。Glassfish在Docker Hub中為想嘗試新功能的開發人員提供了兩個額外鏡像:Nightly和Ozark。Ozark包含了運行Glassfight 4.1的MVC 1.0,用于支持Java EE 8。
GlassFish目前存在一個涉及域受損的問題。如果用戶刪除glassfish/domain/domains目錄就會出錯。試圖這么做后,文件會像被鎖定了一樣無法被刪除,即便是在容器中重新安裝一份全新的GlassFish 4.1也無濟于事。已經有些解決這一問題的方案被公布出來。最常見的是Github上這一問題的解決方法:將無法被刪除的結構上移一層,然后刪除它。
關于Java,可以關注這些產品>>
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都控件網