容器並不是乙個全新的技術,但這並不妨礙docker如風暴一樣席捲整個世界。如果你在it圈裡,你一定聽說過docker。就算與其他熱門技術,如:puppet/chef,hadoop或者mongodb放在一起,docker仍然讓你耳目一新。
不過就算docker現在怎樣的如日中天,這並不意味著它一定適合你。就如同我在這篇 tech pro rearch 的分析文章中讀到的一樣,「對於是否要採用docker作為企業的未來技術方向,你需要的是謹慎!」
在你決定嘗試docker之前,先了解以下這10點:
現代軟體系統一般都由各種可執行的二進位制檔案,庫檔案,配置檔案和其他依賴組成。在一台電腦上完成裝配已經是非常困難和複雜的事情,要「發布」這些軟體的時候,事情會變的更加複雜。一旦你開始發布過程,你就需要找到一種能夠讓這些元件正確打包的方式,還要考慮如何把打包好的軟體放到它們應該去的地方。docker就是這樣一種幫助你進行軟體打包的方式,無論你的軟體有多少依賴,發布到**,其他開發人員的機器或者是生產環境;docker都給你提供一種簡單易用而且標準化的方式。
docker的出現不過幾年的時間,但是容器技術已經存在幾十年了。容器技術在主機時代已經被證明是非常有用的技術,這讓docker的成功看上去更像是時勢造英雄的結果,包括linux的流行,虛擬化的大規模應用和雲計算的興起都給docker技術的火熱創造了必要條件。
無論你選擇哪家技術**商,基本上他們100%的支援docker。從亞馬遜aws,到redhat到google,每一家能很好的支援docker。
雖然docker起源於linux平台,但是微軟正在大力擁抱docker技術。docker依賴於很多在windows平台上並不存在的技術,比如linux容器技術(lxc),cgroup和命名空間(namespaces)技術。所以微軟正在開足馬力在windows server上提供對應的能力以便與docker進行整合。實際上,微軟在windows中也使用自己的容器化技術很多年了,現在所要做的就是讓這些技術能夠更好的相容docker,因為docker已經成為事實上的標準。
docker是圍繞linux的cgroup來實現的,cgroup的作用就是控制容器可以使用的各種計算機資源,包括cpu,記憶體,網路和磁碟。在這一點上docker提供了與虛擬機器同樣的能力,讓你可以把計算機的一部分資源分配給一部分使用者或者程序,這樣他們就不會占用所有的計算資源;同時,docker又不會像vmware所提供的虛擬化一樣帶來那麼巨大的資源浪費(虛擬機器必須執行整個作業系統,而docker只是對應用進行虛擬化)。
在一台伺服器上執行多個作業的傳統方式是啟動多個虛擬機器,然後在不同的虛擬機器上執行不同的作業。因為虛擬機器必須啟動整個作業系統,它就會很慢,一般都需要數分鐘的時間。同時這些虛擬機器還非常消耗資源,因為作業系統本身就要吃掉很多資源。容器可以解決同樣的問題,但是啟動容器和啟動乙個程序是同一級別的,所以docker讓你可以節省掉作業系統所帶來的資源浪費,以程序級別的消耗來提供與虛擬機器類似的隔離能力。
相對於虛擬機器,docker並不是一種非黑即白的替代方案,這主要是因為docker依賴於底層標準化的作業系統,而虛擬機器是當前解決這個問題最好的方式。但是,這也意味著docker是依賴於某種作業系統的,所以你不可能在一台容器化主機上同時執行windows和linux應用,你需要至少2臺分別執行windows和linux的容器化主機才行。同時,就docker當前的技術發展情況來看,容器的隔離能力還做得不到和虛擬機器同樣的級別;因此對於有些多租戶的場景來說,docker可能並不那麼適用。
在你登上docker這趟列車之前,你要知道你上的是新幹線而不是蒸汽機車,每小時400公里的速度可不是鬧著玩的。看看這個僅僅存在了1年半的技術,它的api已經發布了15個版本,你就知道它的變化有多快了。就算docker正在快速的成熟,並且已經逐漸具備了企業級軟體的能力,但是它並不提供10年技術支援,而著可能是很多企業所需要的。
注:作者的原文寫於2023年,現在docker的版本已經是1.12。雖然docker很流行,它並不缺少競爭對手。比如coreos最近也發布了乙個名為rocket的產品,docker最好的linux伴侶ubuntu也在發展它自己的lxd容器技術。這些競爭對手多少都在撕扯docker封閉的生態系統。在docker的世界裡,所有的東西都要圍繞docker registry來執行,你要麼適用docker所提供的公共服務,要不在自己的資料中心中部署一套,這並不是免費的。
無論docker怎樣,容器技術都會繼續盛行下去,因為容器讓現代軟體技術和計算機技術變的更加簡單易用。而在容器這個領域裡,docker是毋庸置疑的領導者,你沒有辦法迴避這個事實。但是,到底以怎樣的方式接受,接受多少,多快,你一定要根據自己企業的現狀來考慮。
docker4dotnet #1 前世今生 & 世界你好
docker4dotnet #2 容器化主機
dockercon 2016 – 微軟帶來了什麼?
real-world docker: 10 things we』ve learned
(本文在slideshare上可能無法正常訪問,可以通過在devopshub訂閱號中輸入d4dtools獲取)
Docker 你應該知道的10件事
容器並不是乙個全新的技術,但這並不妨礙docker如風暴一樣席捲整個世界。如果你在it圈裡,你一定聽說過docker。就算與其他熱門技術,如 puppet chef,hadoop或者mongodb放在一起,docker仍然讓你耳目一新。不過就算docker現在怎樣的如日中天,這並不意味著它一定適合你...
docker 你應該知道的10件事
容器並不是乙個全新的技術,但這並不妨礙docker如風暴一樣席捲整個世界。如果你在it圈裡,你一定聽說過docker。就算與其他熱門技術,如 puppet chef,hadoop或者mongodb放在一起,docker仍然讓你耳目一新。不過就算docker現在怎樣的如日中天,這並不意味著它一定適合你...
你應該知道git rebase
多人開發時,一般都會使用git來進行 管理。使用過git的童鞋肯定對git pullgit pushgit merge非常熟悉。那麼,大家有沒有了解過git rebase命令呢?rebase翻譯成中文叫 變基 相比merge,rebase並沒有進行合併操作,該命令只是提取了當前分支的修改,將其複製在...