談起容器技術,不得不提Docker技術。
Docker 是 PaaS 提供商 DotCloud 開源的一個高階容器引擎,原始碼託管在 Github 上,基於Go語言並遵從Apache2.0協議開源。Docker相當於物理行業的集裝箱對物流的影響一樣,成為Container上執行鏡象的統一打包和交換的標準。
我們知道,Docker使用了容器的環境隔離和資源限制技術,把映象和執行環境打包到Image中。Register支援容器上傳和下載功能。
Docker同時提供了Build,Ship和Run,運維只需要在環境重配置好Docker,剩下的工作就是部署容器,實現Build Once Run Anywhere和Configure Once Run Anything;從而促進了容器技術的爆發。
在架構上,Docker採用Client Server樣式和外掛式架構設計,Docker的後端採用非常松耦合的架構,模組之間相互獨立,使用者透過Docker Client與Docker Daemon建立通訊,併傳送請求給Docker Daemon。
Docker Daemon提供Server功能接受Docker Client的請求;隨後透過Engine執行Docker內部的一系列工作,每項工作都是以一個Job的形式的存在。
Docker講底層容器執行時剝離出來,實現更好的平臺無關性。LibContainer是對各種容器的抽象,發展為RunC,並貢獻給OCP組織作為定義容器環境的標準。Docker容器的三大編排工具,Compose、Swarm和Machine。Compose是服務編排工具,是定義和執行Docker主機上多容器應用的工具,透過單獨檔案,定義多容器應用並執行容器。
Docker的網路技術和能力一直是容器技術中最難、也是最不看好的技術之一,Libnetwork是Docker公司正在開發的新的網路底層架構,由libcontainer和Docker Engine中的網路相關的程式碼合併而成。Libnetwork的標的是引入了容器網路模型(CNM),併為應用程式提供一致的程式設計API介面以及網路抽象。 Libnetwork的容器網路模型包含了三個重要概念,Network Sandbox,Endpoint和Network。
Weave建立了Networking Plugin技術,目前成熟的有Networking Plugin和Volume Plugin。
Weave方案包含兩大元件,使用者態Shell指令碼和Weave虛擬路由容器。Weave虛擬路由容器需要在每個宿主機上佈置第三方外掛,把不同宿主機的Route容器連線起來,使得Docker工具生態無縫整合到Docker。(其他網路方案介紹,請參看電子書)
Weave建立一個虛擬網路,連結多個主機的Docker容器,並使他們可以被自動發現,對使用該網路的應用來說,所以容器就像是連結在同一個網路交換機上,無需配置埠對映、鏈路等引數。
容器和容器OS
CoreOS是最為受歡迎的容器虛擬化OS,專為Docker設計和核心裁剪。 CoreOS中有兩個關鍵容器叢集管理工具,etcd主要實現叢集服務發現、資訊共享和資料同步;而Fleet實現叢集狀態維護、容器操作和確保服務一致可用。
VMware也推出了容器OS系統Photon,在VMware上建立VM,並且安裝Photon系統即可部署執行容器,並且支援目前主流的Docker、Rkt和PGC容器平臺。Photon可以容器管理認證工具Lightwave配合,可以實現更好的許可權管理。
Docker容器和儲存
Docker容器在資料讀寫和儲存上,是採用分層和COW的儲存技術實現,Docker本身的COW檔案系統不支援資料持久儲存,在容器被刪除或重啟後,之前的檔案更改就會丟失(變化的資料被以COW寫到一個新的位置)。
Volume的引入雖然解決了資料丟失問題,但是當容器遷移後,資料捲無法跟隨Docker容器一起遷移,ClusterHQ的Flocker的出現恰恰解決Volume的不足,使得資料跟隨Docker遷移。
Flocker的容器和儲存捲遷移分為全遷移和增量同步兩個過程,配置檔案描述Docker部署方式和狀態,執行配置則生效(遷移Redis);以遷移本地儲存(非共享儲存)為例,整個過程為先打快照,全遷移,增量同步。
Flocker以Docker Volume Plugin的方式部署在Docker中,與Docker整合。目前共享儲存的支援能力比較成熟,支援的產品包括AWS EBS、Scale IO和XtremIO等,並且支援如AWS、Rackspace等雲平臺;本地儲存方式在技術成熟度上並不高。
Flocker透過Storage Driver遮蔽儲存差異,並透過儲存提供的Flocker標準介面實現對底層儲存操作,當主機容器在不同主機間遷移時,Flocker只需要對容器的Volume進行主機的重對映。
Docker與PaaS
隨之容器的發展,CaaS容器即服務的概念也應時而生,其大意就是基礎設施以容器的方式來供給給應用使用。以容器為單位成為PaaS的共識,基於Docker的容器打包和分發有望成為PaaS平臺的標準, Docker將大幅拓寬PaaS的應用範圍,並促進PaaS的快速發展。
基於容器的打包一統新一代PaaS,第三代PaaS,DEIS、Flynn等均基於Docker,挑戰老的PaaS平臺。
PaaS已經出現了數年時間,第一批是Azure和Heroku等公用雲服務,之後出現的Cloud Foundry和OpensShift允許使用者建立自己的PaaS,包括了內部資料中心以及雲環境。現在,第三代PaaS浪潮正在到來。
Flynn是一個開源的PaaS平臺,可自動構建部署任何應用到Docker容器叢集上執行,其功能特性與元件設計大量參考了傳統的PaaS平臺Heroku。Flynn目前還不是很穩定。但整個系統非常靈活,相互松耦合,便於任意元件的替換。
Docker與IaaS平臺
主流IaaS雲平臺都支援Docker的執行 (AWS、Google Compute Engine、Rackspace等)。Docker彌合了不同IaaS之間的差異,Docker的輕量和可移動性使得其比較適合用在Hybrid Cloud中。降低了IaaS服務商使用者粘性,使得跨雲服務商遷移更加自由。從而使得IaaS服務商被管道化。如果Container把安全問題解決了,可能就會有比較大的變化。
出現基於Docker的Container as a Service或Orchestration as a Service,如Tutum,可以避免IaaS的鎖定,甚至不用關心是執行在物理設施上,還是執行在哪家IaaS平臺上。
2014年6月Rackspace宣佈和CoreOS合作提供Baremetal as a Service方案OnMetal,結合了雲端計算的靈活性和基於container的高效能虛擬化,提供single tenant baremetal cloud serivce。
這種樣式將影響當前以虛擬機器為核心的IaaS平臺,預計後續可能出現同時提供Docker over Baremetal、 Docker over VM和VM三種混合的資源分配和排程雲平臺。
Docker也引發了基於容器的應用叢集管理平臺,如Kubernetes得到了微軟、紅帽、IBM、Vmware、Docker、Mesosphere、CoreOS和SaltStack等多家廠商的支援。容器叢集管理技術可能導致Openstack邊緣化。
Docker與DevOps
基於Docker可以更好的實現DevOps。雖然有許多工具適合DevOps部署,使開發人員和操作更貼近,但Docker是一個與DevOps原則密切相關的框架。使用Docker,開發人員可以專註於他們的程式碼,而不必擔心在生產環境中執行它們的負面影響。
DevOps團隊可以將整個容器作為容器處理,檔案系統和依賴關係管理的分層方法使得環境的配置更容易維護。在相同的原始碼控制系統(如Git工作流程)中版本化和維護Dockerfiles使得它非常有效地管理多個開發/測試環境。不同環境的多個容器可以在同一VM上執行時被隔離。Docker還可以很好地使用現有的工具,如Jenkins,Chef,Puppet,Ansible,Salt Stack,Nagios和Opsworks。
Docker有可能對DevOps生態系統產生重大影響。它可以從根本上改變開發人員和運營專業人員合作的方式。新興DevOps公司,如CloudMunch,Factor.io,Drone.io可能必須採用Docker並將其帶入他們的CI和CD解決方案。
Docker與微服務架構
基於Docker容器和其生態系統的微服務架構是下一代PaaS的核心,在Docker出現之前,雖然我們談論微服務架構,但是其實是很難實現的。微服務要執行,首先需要一套執行的環境。這套環境不能對外部有依賴性。同時,執行環境的粒度又必須足夠的小,這樣才能稱之為”微“,否則必然是對資源的巨大浪費。
一個微服務可以跑在一臺虛擬機器上面,但是虛擬機器粒度太大,即使最小的虛擬機器,也至少也有1個核。服務一個使用者的服務,顯然用不了一個核。同時,虛擬機器有沒有一套方便的管理機制,能夠快速的讓這些服務之間能夠組合和重構。
Docker出現以後,我們看到了微服務的一個非常完美的執行環境。一個容器就是一個完整的執行環境,不依賴外部任何的東西,具備獨立性。一臺物理機器可以同時執行成百上千個容器,粒度細。其計算粒度足夠的小。容器可以在秒級進行建立和銷毀,非常適合服務的快速構建和重組。數量眾多的容器編排管理工具,能夠快速的實現 服務的組合和排程。
此篇文章通俗易懂講解了Docker的概念和原理,但與微服務的知識海洋相比,這隻是滄海一粟。微服務代表IT架構未來架構發展趨勢和演進方向,目前已有大量關於微服務技術原理、實踐總結和部署實施的文章,但對於初學者而言,零散學習並不能完全領會文章精髓,也無法構建完善的知識體系。
但值得慶幸的是,極客時間推出熱門微服務課程,幫你從0開始構建微服務體系。具體來說,該專欄把微服務知識分為四個部分,幫助學習者循序漸進的掌握微服務知識。限時優惠,分享返現。具體每部分內容介紹如下:
第一部分,我會儘量用最通俗的語言去講解微服務架構的基本原理,幫你解答三個問題:什麼是微服務?什麼時候適合微服務改造?微服務架構到底是什麼樣的?
第二部分,我會結合在實際業務中的經驗,給你講述微服務架構改造過程中可能會遇到的問題和對應的解決方案,以及搭建微服務架構時,如何做技術選型。
第三部分,我會給你講述微服務、容器化、DevOps這三者之間的關係,以及在具體實踐中如何運用這三種技術以給業務的架構帶來質的飛躍。
第四部分,我會給你介紹下一代微服務體系可能的發展方向,並分享作者對此的看法。
微服務也是當下移動網際網路最火的後端架構之一,而專欄作者透過這幾年親自踐行微服務的思想,使自己的技術水平不斷提升,成長為一名技術專家。作為程式員的你,也一定渴望在技術的道路上不斷進步,那麼微服務能助力你縱身一躍,跳到優秀的架構師的行列。
溫馨提示:
請搜尋“ICT_Architect”或“掃一掃”二維碼關註公眾號,點選原文連結獲取更多技術資料。
Stay hungry, Stay foolish