亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 唱衰docker,給大紅大火的Docker潑點冷水 [打印本頁]

作者: 開源將軍    時間: 2016-06-21 23:16
標(biāo)題: 唱衰docker,給大紅大火的Docker潑點冷水
從我上一次對Docker進行評價到現(xiàn)在已然經(jīng)過了一年有余,想當(dāng)初我在文章里對這套容器技術(shù)方案的架構(gòu)設(shè)計缺陷與糟糕的用戶體驗做出了嚴(yán)厲的批判。不過在這段時間當(dāng)中,Docker項目也開始逐步走向成熟,迎來自己的1.0版本并在Amazon的推動下聲名大噪,但同時用戶挫敗感、過度宣傳引發(fā)的指責(zé)甚至因漏洞遭利用而引發(fā)主機感染越來越多。當(dāng)然,Docker Hub中私有庫的引入讓用戶不必再為了托管部署而運行自有Registry系統(tǒng),再配合webhook以及同GitHub的緊密集成, Docker看起來有一個良好的前途。
有鑒于此,我決定再給Docker一次機會,并以六個月為周期將其引入生產(chǎn)環(huán)境。結(jié)果非常糟糕,Docker性能極差,而旁門左道的解決方案加上以用戶體驗為代表的種種短板簡直令人抓狂。實際上,Docker的性能表現(xiàn)實在太差,禁用緩存功能竟然能夠加快build速度。
(感興趣的朋友可以查看reddit與ycombinator網(wǎng)站上與該主題相關(guān)的討論內(nèi)容)。


Dockerfile
Dockerfile存在著一系列問題,它令人討厭、充滿局限、不倫不類而且包含根本性缺陷。假如要構(gòu)建一個庫的多個鏡像,例如第二個鏡像包含內(nèi)容調(diào)試工具,但兩個鏡像擁有同樣的基礎(chǔ)運行要求。Docker不支持這種做法(詳見9198號問題),我們無法擴展Dockerfile(詳見735號問題),使用子目錄會破壞構(gòu)建上下文并導(dǎo)致用戶無法使用ADD/COPY(詳見2224號問題)或者“管道(piping)”(詳見2112號問題),我們也不能在構(gòu)建過程中通過環(huán)境變量實現(xiàn)有條件的指令變更(詳見2637號問題)。
我們給出的解決方案是創(chuàng)建一個基礎(chǔ)鏡像,兩個特定環(huán)境的鏡像以及其它一些包括重命名以及sed替換功能的Makefile自動化。除此之外,Docker中還有一些意想不到的“功能”有可能導(dǎo)致環(huán)境變量$HOME消失,進而產(chǎn)生無用的錯誤信息。太令人厭惡了。
Docker緩存/層
Docker有能力利用COW(即寫入時復(fù)制)文件系統(tǒng)實現(xiàn)緩存Dockerfile指令,這一點與LVM快照機制相似,而且直到最近都只支持AuFS,而后者還存在大量問題。之后,0.7版本引入了多種不同的COW實現(xiàn)方式以改進穩(wěn)定性與性能,感興趣的朋友可以點擊此處了解更多細(xì)節(jié)信息。

然而,這套緩存系統(tǒng)不智能,它不能阻止單一指緩存(詳見1996號問題),產(chǎn)生了一些意料之外的副作用。它的運行速度也極為緩慢,如果禁用緩存并避免使用層,其構(gòu)建速度甚至能夠得到提升。而Docker Hub緩慢的上傳/下載速度則讓情況進一步惡化,這個問題我們將在下文作進一步評述。
這些問題均源自Docker整體所采用的糟糕的架構(gòu)設(shè)計,這直接導(dǎo)致它即使是在完全不適用的情況下,依然會強制執(zhí)行線性指令(詳見2439號問題)。作為構(gòu)建緩慢的解決方案,可以使用支持異步執(zhí)行的第三方工具,例如Salt Stack、Puppet甚至bash,它們完全能夠達(dá)成層的目的而使層變得沒用。
Docker Hub
Docker鼓勵用戶通過Docker Hub進行社會化合作。用戶可以在上面發(fā)布Dockerfile——包括公開與私有文件。其他用戶可以通過FROM指令而不是復(fù)制/粘貼來繼承并使用這些Dockerfile。該生態(tài)系統(tǒng)類似于AWS市場以及Vagrant Boxes中的AMI,從理論上講還是非常有用的。
然而由于一些原因,Docker Hub的實現(xiàn)存在缺陷。Dockerfile不支持多FROM指令(詳見3378號、5714號以及5726號問題),這意味著只能繼承單個鏡像。此外,它沒有版本強制。舉例來說,dockerfile/ubuntu:14.04的作者可以替換該標(biāo)簽的內(nèi)容,這相當(dāng)于允許用戶使用軟件包管理器但又不沒有版本強制機制。而且正如下文所提到,Docker Hub在這方面存在著令人沮喪的速度緩慢的限制。
Docker Hub還擁有一套自動化構(gòu)建系統(tǒng),能夠檢測到庫中新提交內(nèi)容并觸發(fā)容器構(gòu)建。因為許多原因,這項功能也是完全沒用。由于幾乎不能定制,構(gòu)建配置受到了極大限制,甚至無法支持最基本的腳本執(zhí)行前/后的鉤子。Docker Hub采用一套特殊的項目結(jié)構(gòu),一個項目下只能有一個Dockerfile,這破壞了我們先前提到的構(gòu)建解決方案,而且構(gòu)建速度極為緩慢。
我們的解決方案是使用CircleCI,它是一個優(yōu)秀的托管CI平臺,能夠從Makefile觸發(fā)Docker構(gòu)建并推送到Docker Hub。雖然這種方式無法解決速度慢的問題,但唯一的可選方案是使用我們自己的Docker Registry,其復(fù)雜程度都到了荒唐的地步。
安全性
Docker最初使用LXC作為默認(rèn)執(zhí)行環(huán)境,但現(xiàn)在,0.9版本默認(rèn)使用libcontainer。這使得用戶可以調(diào)整命名空間功能、權(quán)限,并且可以在使用合適的exec-driver時使用自定義的LXC配置文件。
這需要一直在主機上運行一個root守護進程,而且Docker一直存在著若干安全漏洞,例如CVE-2014-6407以及CVE-2014-6408。坦率地講,這些問題起初就不應(yīng)該存在。甚至Gartner公司也在其追蹤報告中給出了糟糕評價,并表達(dá)了對Docker的不成熟和安全性問題的擔(dān)憂。
按照設(shè)計,Docker對于命名空間功能給予充分信任,這就導(dǎo)致其攻擊面要比其它典型的虛擬機管理程序更寬。Xen擁有129項CVE,相比之下Linux則擁有1279項。在某些情況下上述問題并非不可接受,例如在Travis CI當(dāng)中進行公開構(gòu)建,但這對于私有、多用戶環(huán)境來說無疑是危險的。
容器與虛擬機并不是一回事
命名空間與cgroups功能極為強大,允許一個進程及其子進程擁有一個共享內(nèi)核資源——例如網(wǎng)絡(luò)堆棧以及進程表——的私有視圖。這種細(xì)粒度控制與隔離機制配合上chroot jailing與grsec,能夠提供非常出色的保護層。一些應(yīng)用程序,如uWSGI,可以在沒有Docker的情況下直接利用這些特性的優(yōu)點,而不支持命名空間的應(yīng)用程序則可以利用firejail實現(xiàn)沙箱化處理。如果您有冒險精神,可以將這種支持直接添加到自己的容器化項目的代碼中,例如LXC以及Dokcer,從而在單一內(nèi)核空間中利用這些特性的有點高效地運行多套發(fā)行版。相較于虛擬機管理程序,這種作法有時候會有降低內(nèi)存使用率和減少啟動時間的好處,但其代價就是降低安全性、穩(wěn)定性以及兼容性。舉個與Linux Kernel Interface相關(guān)的最糟糕的極端案例,在內(nèi)核及用戶空間中運行不兼容或者未經(jīng)測試的glibc組合版本很可能引發(fā)意料之外的行為。
早在2008年LXC尚處于構(gòu)思階段時,硬件輔助虛擬化也僅僅誕生了幾年時間,許多虛擬機管理程序都存在著性能以及穩(wěn)定性問題。因此,虛擬化技術(shù)并沒有得到廣泛應(yīng)用,而面對成本以及物理基礎(chǔ)設(shè)施占用減少等優(yōu)勢,上述問題是可以接受的。不過如今我們的虛擬機管理程序在性能表現(xiàn)方面幾乎與裸機設(shè)備不相上下,而且有趣的是,在某些情況下速度更快。另外,托管的、按需分配的虛擬機速度越來越快,成本越來越低,DigitalOcean在性能與成本方面都要遠(yuǎn)遠(yuǎn)勝過EC2,這也使應(yīng)用程序與虛擬機之間進行一對一映射從經(jīng)濟角度講成為可能。
[編輯意見]正如Bryan Cantrill提出的觀點,虛擬化技術(shù)的性能將受到工作負(fù)載類型的顯著影響。例如,IO任務(wù)繁重的應(yīng)用程序會導(dǎo)致性能降低。
在某些特定的應(yīng)用場景中,容器化確實是恰當(dāng)?shù)慕鉀Q方案,不過除非能夠明確說明為什么在你的應(yīng)用場景中選擇此類處理方式,否則你可能應(yīng)用使用虛擬機管理程序代替。而且即使使用虛擬化技術(shù)方案,你仍然應(yīng)該利用命名空間的優(yōu)點,而在應(yīng)用程序沒有對這些特性提供原生支持的情況下,像firejail這樣的工具可以提供幫助。
Docker并不是必須的
Docker增加了一個復(fù)雜的侵入層,使開發(fā)、故障排查以及調(diào)試工作的難度大幅上升,它帶來的問題往往多于它能夠解決的問題。它在部署上也沒有任何優(yōu)勢,因為你仍然需要利用快照實現(xiàn)響應(yīng)式自動擴展。更糟糕的是,如果大家并沒有使用快照機制,那么生產(chǎn)環(huán)境的擴展就會依賴于Docker Hub的穩(wěn)定性。
目前有不少項目都在濫用容器化技術(shù),例如baseimage-docker,該鏡像旨在通過運行作為入口的init.d簡化檢查、調(diào)試和兼容,甚至還提供一個可選的SSH服務(wù)器,實際上是將容器當(dāng)作虛擬機對待,雖然作者本人以無甚說服力的言詞反對這種觀點。
總結(jié)
如果開發(fā)流程合乎情理,那么你已經(jīng)明白Docker不是必須的。Docker中號稱能夠帶來助益的全部功能要么完全無用,要么實現(xiàn)很差,而其最大的優(yōu)勢直接使用命名空間就很容易實現(xiàn)。如果放在8年前,Docker是一個有趣的概念,但以現(xiàn)在的眼光來看,它幾乎是沒用的。
作者: action08    時間: 2016-06-22 22:45
本帖最后由 action08 于 2016-06-22 22:45 編輯

你是兩邊派,沒有堅定的革命政治立場
作者: 開源將軍    時間: 2016-06-22 23:23
回復(fù) 2# action08


    不是沒有立場,而是真的不好表明立場
作者: action08    時間: 2016-06-22 23:46
docker好不好,我是不知道,因為目前沒有用過,

聽說是大勢所趨,但我11年買的電腦就這樣了,再折騰這把老骨頭能折騰哪里去啊
作者: 開源將軍    時間: 2016-06-22 23:53
回復(fù) 4# action08


    嗯呢,我去年才買的新電腦,雙開虛擬服務(wù)器沒有問題
作者: action08    時間: 2016-06-23 00:14
恩 ,有 錢任性,現(xiàn)在上海一直斷水短糧,快活不下去了,


電腦更新的事,就一直擱置著
作者: 開源將軍    時間: 2016-06-23 00:34
回復(fù) 6# action08


    不會吧,你這樣我還準(zhǔn)備去上海創(chuàng)業(yè)吶,有童鞋慫恿我去上海創(chuàng)業(yè),我才拒絕了
作者: action08    時間: 2016-06-23 00:54
回復(fù) 7# 開源將軍


    情況不一樣,我老家江蘇的,
在上海打工混飯吃,很正常的事情,結(jié)果早年要飯的路上,,,哎,一把淚哦
作者: 開源將軍    時間: 2016-06-23 02:00
回復(fù) 8# action08


    你又何必如此灰心傷氣吶,朋友,愛拼才會贏喔
作者: action08    時間: 2016-06-23 03:08
回復(fù) 9# 開源將軍


    沒有灰心哦,只是眼下確實混得不理想




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2