溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java開發(fā)人員需要注意的五大Docker誤區(qū)分別是什么

發(fā)布時(shí)間:2021-11-20 17:21:29 來源:億速云 閱讀:140 作者:柒染 欄目:云計(jì)算

Java開發(fā)人員需要注意的五大Docker誤區(qū)分別是什么,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

我們?nèi)绾尾拍芨酶硇缘氖褂肈ocker?

Docker最近備受關(guān)注,原因顯而易見。如何成功交付代碼一直困擾著大家。傳統(tǒng)的容器技術(shù)在眾多需求和模板中亂成一團(tuán)。而Docker可以簡(jiǎn)單且重復(fù)的創(chuàng)建容器。相比其它容器,使用Docker可以更快、更自然的交付代碼。Duang,Docker火了!隨之而來也有一些誤解和誤區(qū)。不要太相信別人說Docker好用或者不好用。自己理性地全面思考一下Docker,會(huì)幫助你真正理解是否真的需要它。

小編列舉了從Java角度的五大Docker誤讀。不過首先介紹些背景知識(shí)。

主要誤區(qū)

1. Docker是輕量級(jí)虛擬機(jī)

這是大家初學(xué)Docker時(shí)最主要的誤解。這種誤解倒也情有可原,Docker的確看上去有點(diǎn)像虛擬機(jī)。 Docker網(wǎng)站 上甚至有人比較了Docker和虛擬機(jī)的區(qū)別。但是,Docker實(shí)際上不是輕量級(jí)虛擬機(jī),而是改進(jìn)了的Linux容器( LXC )。Docker和虛擬機(jī)是完全不一樣的,如果你把Docker容器當(dāng)成輕量級(jí)虛擬機(jī)來用,會(huì)遇到很多問題。

在使用Docker之前,必須了解Docker容器和虛擬機(jī)有很多本質(zhì)的區(qū)別。

資源隔離:Docker達(dá)不到虛擬機(jī)所能提供的資源隔離水平。虛擬機(jī)的資源是高度隔離的,而Docker從設(shè)計(jì)之初就需要共享一些資源,這些資源是Docker無法隔離和保護(hù)的,比如頁緩存和 entropy池 。(注:entropy池很有趣,entropy池收集并且存儲(chǔ)系統(tǒng)操作生成的隨機(jī)比特。機(jī)器在需要隨機(jī)化時(shí)(比如密碼相關(guān))使用這個(gè)池。)如果Docker容器占用了這些共享資源,那么其他進(jìn)程在這些資源被釋放前只能等待。

開銷:大多數(shù)人都知道虛擬機(jī)的CPU和RAM能提供類似物理機(jī)的性能,但是有很多額外的IO開銷。因?yàn)榉艞壛颂摂M機(jī)的guest OS,Docker的package更小,比起虛擬機(jī)需要更少的存儲(chǔ)開銷。但這并不意味著Docker沒有任何開銷問題。Docker容器依然需要注意IO開銷的問題,只不過沒有虛擬機(jī)嚴(yán)重而已。

內(nèi)核使用:Docker容器和虛擬機(jī)在內(nèi)核使用上完全不同。每個(gè)虛擬機(jī)使用一個(gè)內(nèi)核。Docker容器則是在所有容器間共享內(nèi)核。共享內(nèi)核帶來一些效率的提升,但是以高可用和冗余為代價(jià)。如果虛擬機(jī)發(fā)生了內(nèi)核崩潰,只有這個(gè)內(nèi)核上的虛擬機(jī)會(huì)受影響。而Docker容器如果內(nèi)核崩潰了,所有的容器都會(huì)受影響。
 

2. Docker使得應(yīng)用可擴(kuò)展

因?yàn)镈ocker可以在很短的時(shí)間內(nèi)在很多服務(wù)器上部署代碼,自然有人會(huì)覺得Docker使得應(yīng)用自身變得可擴(kuò)展。不幸的是,這是錯(cuò)誤的。代碼構(gòu)成應(yīng)用,而Docker并不會(huì)重寫代碼。應(yīng)用的可擴(kuò)展性依然取決于程序員。使用Docker并不會(huì)自動(dòng)得讓你的代碼易于擴(kuò)展,只是讓這些代碼更容易跨服務(wù)器部署而已。
 

3. Docker在生產(chǎn)環(huán)境廣為使用

因?yàn)镈ocker勢(shì)頭正勁,很多人便認(rèn)為Docker已經(jīng)在生產(chǎn)環(huán)境廣為使用。事實(shí)上,這是不對(duì)的。注意Docker還是很新的技術(shù),還不成熟,正在成長,這意味著還有很多煩人的bug和缺乏的功能。對(duì)新技術(shù)感興趣這沒錯(cuò),但是最好要弄清楚新技術(shù)的正確使用場(chǎng)景和需要注意和妥協(xié)之處。現(xiàn)在,Docker很容易應(yīng)用到開發(fā)環(huán)境。使用Docker可以很容易地搭建出很多不同的環(huán)境(至少,給人的感覺是能夠搭建出不同的環(huán)境),這對(duì)于開發(fā)很有用。

而在生產(chǎn)環(huán)境里,新技術(shù)的成長陣痛限制了使用場(chǎng)景。比如,Docker不直接支持對(duì)多機(jī)器的網(wǎng)絡(luò)和資源的監(jiān)控,這使得幾乎無法用在生產(chǎn)環(huán)境里。當(dāng)然也有很多有潛力的地方,比如可以將同一個(gè)package從開發(fā)環(huán)境直接部署到生產(chǎn)環(huán)境。還有一些Docker運(yùn)行時(shí)特性對(duì)于生產(chǎn)環(huán)境也很有用。但是總的來說,在生產(chǎn)環(huán)境里,目前限制多于優(yōu)勢(shì)。這并不是說無法成功運(yùn)用到生產(chǎn)環(huán)境,只是現(xiàn)在還不能指望它一下子成熟和完備。
 

4. Docker是跨OS的

另一個(gè)誤解是Docker在任意操作系統(tǒng)和環(huán)境上都可以工作。這可能來自于裝卸貨物的集裝箱的類比,但是軟件和操作系統(tǒng)的關(guān)系可不像船位那么直接。

實(shí)際上,Docker只是Linux上的技術(shù)。并且Docker依賴特定的內(nèi)核特性,必須要有最新版本的內(nèi)核才行。基于不同OS的差異性,跨OS時(shí),如果使用的不是最底層通用的特性,會(huì)遇到嚴(yán)重的問題。這些問題可能只有1%的發(fā)生率,但是當(dāng)你在多臺(tái)服務(wù)器上部署時(shí),1%也是致命的。

雖然Docker只在Linux上運(yùn)行,但是也可以在OS X或者Windows上使用Docker。使用 boot2docker 會(huì)在OS X或Windows機(jī)器上運(yùn)行一個(gè)Linux虛擬機(jī),這樣Docker可以在這個(gè)虛擬機(jī)里運(yùn)行。
 

5. Docker增強(qiáng)應(yīng)用的安全性

覺得Docker可以改進(jìn)代碼和交付代碼過程的安全性,這也是誤解。這也是真實(shí)的集裝箱和軟件上容器的差別。Docker是一種容器化技術(shù),添加了編排方法。但是Linux的容器有一些安全漏洞可能會(huì)被攻擊。Docker并沒有為這些漏洞添加任何安全層或者補(bǔ)丁。它還不是能保護(hù)應(yīng)用的鐵布衫。

從Java角度看

Docker在Java開發(fā)人員中已經(jīng)有些應(yīng)用。Docker的某些特性讓我們更容易構(gòu)建可擴(kuò)展的上下文。不像 uber-jar ,Docker可以幫助你將所有的依賴(包括JVM?。┐虬揭粋€(gè)隨時(shí)可發(fā)布的鏡像里。這是Docker吸引廣大開發(fā)人員的重要特性。但是,這也會(huì)帶來一些隱患。一般來說,程序員需要用不同的方式和代碼交互 - 監(jiān)控它,調(diào)試它,鏈接它,調(diào)優(yōu)它。。。如果使用Docker,這些都會(huì)需要額外的工作。

比如,我們想使用 jconsole ,它依賴于JMX功能,JMX因?yàn)橐褂肦MI又需要網(wǎng)絡(luò)。使用Docker的話就不是很直接,需要 一些技巧 去開啟所需端口。我們最初發(fā)現(xiàn)這個(gè)問題是當(dāng)我們想要構(gòu)建 Takipi 的Docker安裝器,我們不得不在容器里JVM之外運(yùn)行了一個(gè)后臺(tái)程序。詳細(xì)的解決方案在 GitHub 上。

另外一個(gè)很嚴(yán)重的問題是Docker容器的性能調(diào)優(yōu)相當(dāng)困難。當(dāng)使用容器時(shí),你不知道每個(gè)容器到底會(huì)分配多少內(nèi)存。如果你有20個(gè)容器,內(nèi)存會(huì)以你不確定的方式分配給它們。如果你打算用參數(shù)-Xmx調(diào)優(yōu)堆的大小,就很困難,因?yàn)閷?duì)Docker容器內(nèi)JVM的處理取決于能夠自動(dòng)得到該容器分配到的內(nèi)存大小。如果都不知道分配了多少內(nèi)存,性能調(diào)優(yōu)幾乎不可能。
 

Docker是很有意思的技術(shù),有一些真實(shí)有效的使用場(chǎng)景。作為一個(gè)新興技術(shù),還需要大量時(shí)間來解決缺失的功能和已知的bug。但是,現(xiàn)在這個(gè)領(lǐng)域的確有很多的炒作。不過記住哦,炒作可不是成功~

關(guān)于Java開發(fā)人員需要注意的五大Docker誤區(qū)分別是什么問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI