將要改變IT世界的的docker技術是什麼?
“很多時候,我們面臨未來的預測和期望,其實很多答案已經存在在歷史中。”
“沒有集裝箱,就不會有全球化。”,《經濟學家》這個評論可以說是對於這個普通的箱子的歷史性地位的一個總結。
這隻普通的箱子,技術含量不高,也並不複雜。和其他很多偉大的發明一樣,它的發展也是歷經坎坷。集裝箱的概念在20世紀二三十年代就出現了,但是直到1957年,才由麥克萊恩開始運用於大規模的貨物運輸。在之後,經歷了碼頭工人的抵制,標準化之爭,直到70年代中後期才大規模流行開來,但是一旦它開始普及,就立刻掀起了一股巨大的變革性的浪潮。
很多時候,我們面臨未來的預測和期望,其實很多答案已經存在在歷史中。對於傳統行業如此,對於高速發展的IT行業,更是如此。在IT的世界裡,是否已經出現了這樣一隻改變它的“箱子”呢?
Docker,顧明思義,是碼頭工人的意思。從它的誕生,就和集裝箱的思想有著千絲萬縷的聯絡。Docker的發展歷史,其實很像集裝箱早期的發展史。和傳統的集裝箱萌芽一樣,Container(容器)技術其實早在多年前就出現了。從2005年的Solaris Containers到2008年LXC 0.1版本的推出。再到後來的Google推出開源的容器管理工具lmctfy。也將近經歷了10年的發展。直到2013年,Docker的出現。才代表著容器技術一個新的時代的來臨。
很多人將Docker等同於Container,其實這是不對的,就像傳統的集裝箱運輸體系一樣,集裝箱只是其中一個最核心的部件。用它來代表整個以集裝箱為核心的運輸體系。那麼Docker其實就是以容器為核心的IT交付與執行體系。它包括了Docker Engine(容器的執行管理),Docker Registry(容器的分發管理),以及相關的一系列的API介面。包括後來發展起來的Docker Machine,Swarm,Compose。 所以可以看做是一套以容器為核心的建立,分發,和執行的標準化體系。
如果把Container比作是傳統領域的集裝箱,那麼承載集裝箱的港口就可以看做是雲的服務商,集裝箱的拖船可以看做是雲服務所提供的IAAS服務。Docker公司弄出的Docker Machine之類的可以看做是一種集裝箱的吊裝裝置。當然,作為一套推動全球經濟快速運轉的航運體系,不僅僅只有這些,還有無數的基礎設施,包括高速公路,集裝箱的拖車,將貨物裝入集裝箱的叉車,搬運工人。
另外,還有一套軟的設施,包括各類的標準,集裝箱的交付流程。所有的這些,我們都可以從IT世界裡面的看到他們的身影。
所以說,Docker是一套以容器技術為核心的思想和一套標準化體系。它不是一個技術,也不是一個公司。Docker不等同於現在的Docker公司,和它的發展和興衰沒有必然的關係。
Docker會是改變IT世界的那隻”箱子“嗎?下這個結論還有點早,但是我們可以從傳統的以集裝箱為核心的航運體系的發展史來預測一下它的未來。首先,來看看現代航運體系中,最核心的那個東西,也就是集裝箱,它是什麼時候發明的?其實在上世紀20年代就已經在使用了。但是為什麼一直到上世紀70年代才開始流行開來。因為那個時候,集裝箱僅僅是一個工具,僅僅是防止損壞和被盜。它沒有融入到全社會的協作體系中。1956年,集裝箱之父麥克萊恩,第一次將它用到大規模的貨物運輸,這個時候,它才由一個單純的工具,開始發展成一種新的觀念和體系,才開始逐漸融入到全產業鏈條的運轉中去。到上世紀70年代中期,各種專用的集裝箱港口,拖船,吊裝裝置開始普及和完善,這才代表的一個新的時代的開始。以集裝箱為核心的現代航運體系,開始取代了舊式的貨運體系。
我們再來看看Docker的發展歷史,容器技術其實早在10多年前就出現了。但是為什麼很少人知道它?因為那個時候,它僅僅只是一個虛擬化的技術,只是從一個角度解決了Run的問題,沒有看出相比KVM,XEM有太多的優勢。2013年,Docker的出現是一個標誌性的節點。它首次提出了Build,Ship,Run的概念,將容器技術向IT產業鏈條的上游和下游進行了延伸。從軟體的使用領域,延伸到了軟體的生產領域,以及軟體的釋出領域。同時藉助於容器技術,打通了DevOps極大的提高了軟體領域的生產率。但是,相比傳統集裝箱的坎坷道路,它還有很多路要走。全產業界已經接受了以容器映象為主要形態的軟體釋出模式了嗎?應用的執行都基於容器了嗎?分散式以及微服務架構已經非常普及了嗎?顯然沒有 。
Docker剛開始出現時,很多人覺得它和Java很像,所謂的一次構建,隨處執行。但是Docker和Java其實有本質性的區別的,Java只是解決了執行環境的相容性的問題,或者說它只覺得了Run的問題,並沒有把這個技術延伸到IT產業鏈條的各個環節中,所以註定它只是一個重要的技術,而不能成為改變世界的創新。
集裝箱也好,容器也罷,當我們思考,什麼樣的技術,才是一種顛覆性的技術時,一般從下面幾個維度去思考:
它是否帶來整個產業生產力的大幅度提升。
它是否融入到了整個產業的價值鏈條中去了。
整個產業是否圍繞它進行分工和協作。
Docker是否是一種改變未來IT產業的顛覆式創新,這裡我大膽的給出肯定的答案,至少,從集裝箱的發展史,看到了它未來的樣子。
集裝箱航運的發展史,就是一部產業興衰史。在這個鏈條的無數的人和物的命運都被改變。有的國家,有的港口因此快速崛起。而有的則被時代所拋棄。它消滅了很多傳統的工作崗位,同時也帶來了很多新興的職業。中國這樣的發展中國家,因此能夠快速融入到全球的協作體系中去,實現了自己的快速崛起。Docker未來會對IT產業帶來哪些改變呢?這個問題,的確值得所有人深思。
IT產業分工方式的變革
傳統的IT產業,大部分是以專案的方式來執行。客戶招標,軟體系統的開發商和整合商負責開發。當完成客戶的需求以後,搭建系統進行測試,最後部署到客戶的執行環境。這期間還需要負責系統的除錯,費時費力,如果有新的模組時,還需要重新的部署,除錯。系統的開發者,運營者,客戶之間,無法劃分一條清晰的界限。這很像傳統的航運業裡面,客戶需要自己把一件一件貨物搬到輪船上,費時費力。這種模式註定了無法進行大規模的分工協作,所有的模組需要全部集中在一家大的公司進行開發。應為協作的方式,導致的溝通成本太高。如果未來,所有的系統,全部是以容器映象的方式去釋出。任何雲的服務商都可以去執行這些計算負載。很多不同的模組完全可以外包到世界各地的團隊去完成,只要模組之間以微服務的方式,定義清晰的介面。完成開發後,push到統一的映象倉庫。軟體系統的運營者,從倉庫pull到映象,放到任何的雲的系統去執行。所有的團隊之間,都有統一的交付介面。大大降低了協作成本。所帶來的直接好處是,掃除了軟體眾包的方式的最大障礙。軟體眾包會成功一個非常流行的IT生產方式。
運維角色的轉變
集裝箱航運史上,碼頭工人是個非常悲劇的角色,一開始,抵制集裝箱,認為會大大減少他們的工作機會,到後面,當浪潮來臨是,其實是無法抵擋的。整個的職業基本上就消亡了。大家現在在碼頭上,肯定看不到那種扛貨物的碼頭工人的。但是並不是人消亡了,而是職業消亡了,取而代之的是各類的吊裝裝置的操作工人,集裝箱的排程管理人員。Docker的英文意思就是“碼頭工人”,其寓意就是Docker這種東西,取代了碼頭工人的傳統工作,是機器的延伸。傳統運維,如果僅僅是安裝軟體,配置系統,備份拷貝檔案,部署和釋出。如果所有的系統都是容器映象的方式去釋出,所有的計算負載都是在雲上面去執行。就像傳統的碼頭工人一樣,消亡是必然的。當DevOps真正實現後,開發和運維,其實界限越來越模糊了。人更多的是從事更有創造力的工作。
企業應用市場的興起
Apple Store,帶來了2C領域軟體開發新的商業模式。那麼企業應用市場會有怎樣的創新呢?如果所有的軟體系統,全部是以容器映象的方式釋出。那麼企業應用市場將是一個非常重要的入口。相比於2C領域,企業應用市場還是有一些不同點。未來,會呈現兩種模式,一種是公有的企業應用市場。另一種是私有的企業應用市場。中小型公司,或者比較傳統企業,會傾向於從公有的企業應用市場獲取軟體服務。而比較大型的公司,會傾向於建設自己的企業應用市場。不管是哪種模式,必然會帶來,IT生產領域的分工的細化和全球化。就像目前iPhone手機上的APP所走得道路一樣。
雲服務商會重新洗牌
建立在傳統IT模式下的雲服務商,主要依賴的繫結使用者建立競爭壁壘。Docker技術會彌合各個雲之間的鴻溝,計算負載可以在各個雲的服務商之間自由流動。此時傳統的競爭壁壘不復存在了。從集裝箱航運的歷史看,雲端計算的服務商,好比是傳統集裝箱運輸體系中的港口。倫敦港的迅速衰落,而荷蘭的鹿特丹的快速崛起。為我們提供很好的歷史經驗。最快速的擁抱這種變革的港口,會快速的崛起,而傳統利益之間艱難抉擇的港口,會很快被時代拋棄。當計算可以自由流動時,更好的開放的姿態接納這種流動,更快速的規模擴張,降低單位計算的成本,是在未來雲端計算競爭中勝出的關鍵因素。雲端計算的廠商當前要做的不是設定障礙,阻止計算的流動,也不是推出自己特有的容器的服務,去充當航運公司。因為這不會獲取任何的競爭優勢。反而是要積極參與Docker“航運”基礎設施的建設。標準的制定,有更好的“集裝箱堆場”(映象倉庫),相容各種集裝箱拖船的吊裝裝置,讓自己的航船更經濟,有效的運輸各個航運公司的集裝箱。
Docker發展的現階段,很像集裝箱剛開始用於航運的最初的那幾年。整個產業鏈條尚不完善。價格並不比傳統貨運更有優勢。客戶大部分處於觀望狀態。所以出現了不同的道路的分歧。總結起來,有下面三種道路:
容器技術往下走,去取代傳統的虛擬機器
基於Docker在安全,以及隔離性上面存在的一些問題,以及使用者對傳統機器根生地固的使用習慣(容器當虛擬機器在使用)。有一種聲音是容器應該網IAAS層發展,去取代傳統的虛擬機器,然後再通過Docker這樣一套體系去管理起來。我覺得未來可能不是這個方向,因為傳統的IAAS層已經非常成熟了,傳統的虛擬化技術,也沒用遇到很大問題,Docker再去解決計算,網路,儲存的問題,是重複性的工作,是為了技術而技術,並不會對產業生態帶來任何的好處。這非常像傳統航運體系中,曾經在一個特殊時期,發展起來的一種特殊的模式,就是用拖船運送帶集裝箱的卡車。集裝箱,不需要長出輪子。已經從歷史經驗去證明了。
容器技術往上走,取代傳統的PAAS
傳統的PAAS的確遇到了很大的問題,容器技術往上走,去替代傳統PAAS也是必然的趨勢之一。但是,我覺得這只是副產品,Docker主要的變革,並不是去改變PAAS。未來IAAS,PAAS,SAAS之間的界限越來越模糊。有可能是一個新的名詞,譬如CAAS(Container As A Service)。計算單元都是以容器為單位。上世紀60年代,越戰期間,以集裝箱為單位運送戰略物資時,美軍提出了一個著名的3C原則,也就是一個集裝箱,只運送一種貨物,一個目的地。這個原則,同樣適用於容器,也就是Docker公司提出的一個主要原則,一個程序,只跑在一個容器裡面。所以,集裝箱就是最基礎的計算單元。
私有云的容器服務
現階段,公有云上搭建Docker系統,的確鮮有比較成熟的商用案例。因為要實現穩定的商用環境,一方面需要Docker技術,特別是網路技術的不斷成熟。另外一方面,也需要公有云的IAAS層專門針對容器服務的深度融合。現階段公有云上跑容器服務,就和上世紀50年代,用老式貨船運輸集裝箱業務。反而是私有云領域,得到了較為廣泛的應用,國內大的網際網路公司,紛紛在自己的私有云中實踐Docker。但是大部分依然是比較傳統的使用方法,也就是將容器當虛擬機器用,利用Docker的Build和Ship的體系,實現自己的DevOps。私有云的容器服務,只是特定時期的特定現象。長遠看,公有云逐步取代私有云是必然趨勢。隨著Docker技術的越來越成熟。分散式以及微服務架構的應用越來越廣泛。私有云容器服務會成為歷史。
Docker的未來在哪裡呢?其實很難預測未來的方式。但是在IT產業界,兩個原則是永遠不變的:
簡單的東西,永遠是最有生命力的
客戶永遠只會關注他的業務,不會關心除此之外的任何東西。
Docker只要不停的讓客戶使用或者維護IT系統越來越簡單,永遠只需要關心自己的業務,而不必費心其他的東西。我相信這就是它未來的方向。
後 記
麥克萊恩發明了集裝箱,並且在此基礎上,建立了一個龐大的商業帝國,但是,很可惜,在上世紀80年代卻破產了,其實他並沒有犯什麼大的錯誤,就是跑慢了。當一股浪潮來臨時,只有在浪尖上的一群人,才能迸射出絢麗的浪花。落後於浪潮的人,則很快被新的浪花所掩蓋。2001年,當這個老人逝世時,全世界所有的集裝箱貨船同一時刻拉響了汽笛。給予這位老人已最崇高的敬意。若干年後,或許Docker公司已不存在。但是它所帶來的思想,會流傳更久的時間。我們同樣期待看到業界對它以及那群天才所創造的一切,致以的相同的敬意。