新聞中心
部署docker前必須問(wèn)自己的四個(gè)問(wèn)題
2015-12-21 14:52:20
云計(jì)算 Docker是當(dāng)前技術(shù)領(lǐng)域最火熱話題了,但是真正應(yīng)用到生產(chǎn)環(huán)境并取得革命性成功的案例卻并不多。很多人提起這個(gè)話題,往往認(rèn)為Docker不夠穩(wěn)定,坑多,但在在實(shí)際的生產(chǎn)實(shí)踐過(guò)程中,很多用戶反饋Docker本身的穩(wěn)定性不錯(cuò),畢竟Docker依賴的容器技術(shù)在過(guò)去幾年已經(jīng)在大量的企業(yè)生產(chǎn)環(huán)境運(yùn)行。但是也有相當(dāng)多的企業(yè)在調(diào)研后放棄使用Docker,究竟是什么樣的原因呢?對(duì)我們自己來(lái)說(shuō)Docker到底適合我們的項(xiàng)目嗎?且看Pusher的一位工程師的經(jīng)驗(yàn)總結(jié),希望給我們一些幫助。

創(chuàng)新互聯(lián)是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開(kāi)發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站模板,微信公眾號(hào)開(kāi)發(fā),軟件開(kāi)發(fā),微信小程序開(kāi)發(fā),10年建站對(duì)成都報(bào)廢汽車回收等多個(gè)行業(yè),擁有多年的網(wǎng)站維護(hù)經(jīng)驗(yàn)。
2013年4月Docker被正式發(fā)布開(kāi)源,所以在軟件行業(yè)中Docker還很年輕。像我這樣的網(wǎng)蟲(chóng)(nerds),對(duì)于這么明星耀眼的軟件,首先看到的是它的潛質(zhì),并思考如何開(kāi)始在各種場(chǎng)景下的使用它。
現(xiàn)在很多博主仍在聚焦Docker的優(yōu)勢(shì),而我們感覺(jué)到已經(jīng)是時(shí)候認(rèn)真的詢問(wèn)在什么場(chǎng)景下、為什么這是我們***的選擇方案。而且更重要的是,當(dāng)你可能在兩者之間做出***抉擇的時(shí)候。在慎重思考以下幾點(diǎn)后,我們最終沒(méi)有將Docker用于生產(chǎn)環(huán)境。但是,如果你已經(jīng)將Docker用于生產(chǎn),我們也愿意聽(tīng)一下你的原因。
我將在這篇文章中分享一下我們的一些發(fā)現(xiàn)和一些關(guān)鍵問(wèn)題的概括,如果你也有計(jì)劃實(shí)施使用Docker,這些問(wèn)題你應(yīng)該會(huì)遇到的。
我們也希望從你們那里聽(tīng)到:你認(rèn)為是什么驅(qū)動(dòng)你采用Docker的?你怎么看待未來(lái)工具的變化?你期望它們能做到什么地步?
1-你到底需要做多少?
Docker提供功能廣泛,這里有幾個(gè)的例子:
Images(鏡像):Docker可以通過(guò)Pull和Push命令構(gòu)建對(duì)象到服務(wù)中心
Containers(容器):Docker可以通過(guò)Start/Stop命令管理容器的生命周期
Logging(日志):Docker可以通過(guò)stdout,stderro捕獲輸出所有的容器內(nèi)部信息
Volumes(存儲(chǔ)):Docker可以創(chuàng)建和管理容器的相關(guān)文件存儲(chǔ)
Networking(網(wǎng)絡(luò)):Docker可以創(chuàng)建管理虛擬的接口和內(nèi)部所有容器之間的網(wǎng)絡(luò)橋接
RPC:Docker服務(wù)器提供允許外部程序去控制所有容器的行為的API
提供的功能越多必然會(huì)增加一定程度的復(fù)雜度,據(jù)使用sloccount 統(tǒng)計(jì),僅僅在main repo中就有97100行代碼。它們?cè)贒ocker中全有或者全部沒(méi)有關(guān)系。所有的特性被打包到一個(gè)二進(jìn)制的文件中,沒(méi)有方法可以實(shí)現(xiàn)只打進(jìn)去一半。所以,如果你準(zhǔn)備開(kāi)始使用Docker,就應(yīng)該考慮是否需要它提供的這些功能。
2-搞這么復(fù)雜值得嗎?
一年前,我們?yōu)榱藢ふ曳椒ê?jiǎn)化構(gòu)建運(yùn)行時(shí)的管理,開(kāi)始了Docker跟Jenkins結(jié)合使用。開(kāi)始這個(gè)想法后我們不得不開(kāi)始擔(dān)憂構(gòu)建依賴或同時(shí)構(gòu)建造成的環(huán)境污染等問(wèn)題。每一次在新容器的構(gòu)建,Docker將被隔離。這個(gè)做法(指隔離Docker的操作,譯者注)在我們僅僅需要Java和Docker而不必處理其它的沖突依賴時(shí)簡(jiǎn)化了我們的設(shè)置。
做了這些工作良好的運(yùn)行了一段時(shí)間后,也引入了不少的問(wèn)題。管理運(yùn)行時(shí)容器并非是不重要的,我們要清理掉舊的容器會(huì)留下的文件目錄,否則可能最終引起機(jī)器故障。
為了解決這些問(wèn)題,我們不得不構(gòu)建了一個(gè)包裝工作(參考cide)來(lái)管理Docker容器的每次構(gòu)建。
當(dāng)cide構(gòu)建時(shí),我們也會(huì)和Dockerfile構(gòu)建者關(guān)注一些靈活性問(wèn)題,它不能較好的使用Gemfiles來(lái)適應(yīng)私有庫(kù)的依賴管理。僅僅是獲取運(yùn)行時(shí)和清理工作至少要花費(fèi)三次的不同迭代。
最終新的解決方案要比先前的好。但是我們覺(jué)到這些可以更加簡(jiǎn)單 ,可以跟工具集更緊密的結(jié)合。像所有優(yōu)秀的開(kāi)發(fā)者一樣,你可以在一個(gè)在抽象層尋找一個(gè)解決方案,但是它并不是那么***。
3–你能處理故障嗎?
Pusher的例子略微小眾化,因?yàn)槲覀冇虚L(zhǎng)期運(yùn)行的客戶端連接,這些連接有償提供給我們的客戶以便可靠快速的使用。我們必須先限制分發(fā)用戶的數(shù)量。實(shí)際上,當(dāng)我們部署時(shí)就已經(jīng)采取額外的步驟去限制故障了(參考crank的實(shí)例)。
Docker是按一個(gè)月或者兩個(gè)月的頻次發(fā)布新的版本,你很可能像通過(guò)二進(jìn)制更新到***版。但是,由于Docker是結(jié)構(gòu)化層次的,要想升級(jí)就必須關(guān)閉宿主機(jī)上的所有的容器。這就必然會(huì)增加引入新的故障挑戰(zhàn)。
目前,這是我們放棄在主生產(chǎn)環(huán)境使用Docker***的原因。我們計(jì)劃通過(guò)替換整個(gè)機(jī)器環(huán)境,通過(guò)重定向轉(zhuǎn)換DNS流量,但是直到現(xiàn)在我們也沒(méi)有解決這個(gè)問(wèn)題。依據(jù)你應(yīng)用程序的架構(gòu),這些經(jīng)驗(yàn)也可以為提供一些建議。
如果你在此處不太注意,就會(huì)發(fā)現(xiàn)自己重建整個(gè)應(yīng)用程序只是為了適應(yīng)這種模式而已。這也是我們決定放棄使用Docker的另一個(gè)原因。我們懷疑它能添加延遲和一些額外的開(kāi)銷。
4–你有技術(shù)支持嗎?
最終還是想想看吧,你需要捫心自問(wèn)你具有操作知識(shí)嗎?我們發(fā)現(xiàn)找到詳細(xì)的實(shí)例Docker部署信息非常困難。我們遇到的都是一些操作的問(wèn)題以及如何處理它們。
一旦你深入發(fā)掘Docker的更多操作,你就發(fā)現(xiàn)網(wǎng)上的一點(diǎn)點(diǎn)文檔完全不夠的。所以有兩種方式獲得問(wèn)題的解答:要么多花費(fèi)時(shí)間思考問(wèn)題,多去論壇交流刷刷問(wèn)題,或者你總是能搜索到Docker提供的專門(mén)支持問(wèn)題。
本質(zhì)上,能搜索的是有很多的基礎(chǔ)入門(mén)信息,但是很少量的信息是在***解和可操作性上是可用的。超過(guò)現(xiàn)在的水平去理解它是一個(gè)長(zhǎng)期的實(shí)用解決方案這個(gè)問(wèn)題是很難做到的。我們想給正在做出決定的人提供一點(diǎn)力所能及的幫助,這也是我們分享這篇文章其中原因之一。
那么我們應(yīng)該部署Docker嗎?
***這是一個(gè)你自己能回答的問(wèn)題。根據(jù)你的使用情況,Docker中無(wú)所不包的方法是***的。 如果說(shuō)萬(wàn)丈高樓平地起,它確實(shí)是一個(gè)不錯(cuò)的開(kāi)端。
但是如果你已經(jīng)有一個(gè)已經(jīng)發(fā)布架構(gòu),你就應(yīng)該問(wèn)一下自己到底是否真的合適了。我們建議先規(guī)劃好你的應(yīng)用程序藍(lán)圖,確認(rèn)你應(yīng)該需要什么功能,然后檢測(cè)這些功能Docker是否提供。如果你在構(gòu)建一些很簡(jiǎn)單的應(yīng)用,它可能不是你的理想工具。如果上線的時(shí)間是一個(gè)障礙,它可能也不是你的理想工具。
對(duì)于那些已經(jīng)運(yùn)行在Docker生產(chǎn)環(huán)境的,我們很樂(lè)意想聽(tīng)你們對(duì)于工具的發(fā)現(xiàn)和怎么在社區(qū)交流中得到一個(gè)真實(shí)的交流從而改善社區(qū)的經(jīng)驗(yàn)。
文章題目:部署Docker前必須問(wèn)自己的四個(gè)問(wèn)題
網(wǎng)頁(yè)鏈接:http://m.fisionsoft.com.cn/article/cdjjiih.html


咨詢
建站咨詢
