
輕量容器引擎Docker
Docker是什么
? Docker 是一個開源專案,誕生于 2013 年初,最初是 dotCloud 公司內部的一個業余專案,它基于 Google 公司推出的 Go 語言實作,專案后來加入了 Linux 基金會,遵從了 Apache 2.0 協議,專案代碼在GitHub 上進行維護,
? Docker 自開源后受到廣泛的關注和討論,以至于 dotCloud 公司后來都改名為 Docker Inc,Redhat 已經在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 產品中廣泛應用,
? Docker 專案的目標是實作輕量級的作業系統虛擬化解決方案,Docker 的基礎是 Linux 容器(LXC)等技術,
了解Docker的前生LXC
Linux Container容器是一種內核虛擬化技術,可以提供輕量級的虛擬化,以便隔離行程和資源,
? LXC為Linux Container的簡寫,可以提供輕量級的虛擬化,以便隔離行程和資源,而且不需要提供指令解釋機制以及全虛擬化的其他復雜性,相當于C++中的NameSpace,容器有效地將由單個作業系統管理的資源劃分到孤立的組中,以更好地在孤立的組之間平衡有沖突的資源使用需求,
與傳統虛擬化技術相比,它的優勢在于:
-
與宿主機使用同一個內核,性能損耗小;
-
不需要指令級模擬;
-
不需要即時(Just-in-time)編譯;
-
容器可以在CPU核心的本地運行指令,不需要任何專門的解釋機制;
-
避免了準虛擬化和系統呼叫替換中的復雜性;
-
輕量級隔離,在隔離的同時還提供共享機制,以實作容器與宿主機的資源共享
? Linux Container提供了在單一可控主機節點上支持多個相互隔離的server container同時執行的機制,Linux Container有點像chroot,提供了一個擁有自己行程和網路空間的虛擬環境,但又有別于虛擬機,因為lxc是一種作業系統層次上的資源的虛擬化,
LXC與docker的關系
? docker并不是LXC替代品,docker底層使用了LXC來實作,LXC將linux行程沙盒化,使得行程之間相互隔離,并且能夠課哦內閣制各行程的資源分配,在LXC的基礎之上,docker提供了一系列更強大的功能,

Docker 的特點
容器化越來越受歡迎,因為容器是:
- 靈活:即使是最復雜的應用也可以集裝箱化,
- 輕量級:容器利用并共享主機內核,
- 可互換:您可以即時部署更新和升級,
- 便攜式:您可以在本地構建,部署到云,并在任何地方運行,
- 可擴展:您可以增加并自動分發容器副本,
- 可堆疊:您可以垂直和即時堆疊服務,
為什么使用Docker
作為一種新興的虛擬化方式,Docker 跟傳統的虛擬化方式相比具有眾多的優勢,
? 首先,Docker 容器的啟動可以在秒級實作,這相比傳統的虛擬機方式要快得多,其次,Docker 對系統資源的利用率很高,一臺主機上可以同時運行數千個 Docker 容器,
Docker的優勢
具體說來,Docker 在如下幾個方面具有較大的優勢,
更高效的利用系統資源
? 由于容器不需要進行硬體虛擬以及運行完整作業系統等額外開銷,Docker對系統資源的利用率更高,無論是應用執行速度,記憶體消耗以及檔案存盤速度,都要比傳統虛擬機技術更高效,因此,相比虛擬機技術,一個相同配置的主機,往往可以運行更多數量的應用,
更快速的啟動時間
? 傳統的虛擬機技術啟動應用服務往往需要數分鐘,而Docker容器應用,由于直接運行與宿主內核,無序啟動完整的作業系統,因此可以做到妙級,甚至毫秒級的啟動時間,大大的節約了開發,測驗,部署的時間,
一致的運行環境
? 開發程序中一個常見的問題是環境一致性問題,由于開發環境,測驗環境,生產環境不一致,導致有些bug并未在開發程序中被發現,而Docker的鏡像提供了除內核外完整的運行時環境,確保了應用運行環境一致性,
持續交付和部署
對于開發和運維人員來說,最希望的就是一次創建或配置,可以在任意地方正常運行,
? 使用Docker可以通過定制應用鏡像來實作持續集成,持續交付,部署,開發人員可以通過Dockerfile來進行鏡像構建,并結合持續集成系統進行集成測驗,而運維人員則可以在生產環境中快速部署該鏡像,甚至結合持續部署系統進行自動部署
更輕松的遷移
? 由于Docker確保了執行環境的一致性,使得應用的遷移更加容易,Docker可以在很多平臺上運行,無論是物理機,虛擬機,公有云,私有云,甚至是比較本,其運行結果是一致的,因此用戶可以很輕易的將在一個平臺上運行的應用,遷移到另一個平臺上,而不用擔心運行環境的變化導致應用無法正常運行的情況,
缺點
隔離性
? 基于hypervisor的虛機技術,在隔離性上比容器技術要更好,它們的系統硬體資源完全是虛擬化的,當一臺虛機出現系統級別的問題,往往不會蔓延到同一宿主機上的其他虛機,但是容器就不一樣了,容器之間共享同一個作業系統內核以及其他組件,所以在收到攻擊之類的情況發生時,更容易通過底層作業系統影響到其他容器,
性能
? 不管是虛機還是容器,都是運用不同的技術,對應用本身進行了一定程度的封裝和隔離,在降低應用和應用之間以及應用和環境之間的耦合性上做了很多努力,但是隨機而來的,就會產生更多的網路連接轉發以及資料互動,這在低并發系統上表現不會太明顯,而且往往不會成為一個應用的瓶頸(可能會分散于不同的虛機或者服務器上),但是當同一虛機或者服務器下面的容器需要更高并發量支撐的時候,也就是并發問題成為應用瓶頸的時候,容器會將這個問題放大,所以,并不是所有的應用場景都是適用于容器技術的,
存盤方案
? 容器的誕生并不是為OS抽象服務的,這是它和虛機最大的區別,這樣的基因意味著容器天生是為應用環境做更多的努力,容器的伸縮也是基于容器的這一disposable特性,而與之相對的,需要持久化存盤方案恰恰相反, 這一點docker容器提供的解決方案是利用volume介面形成資料的映射和轉移,以實作資料持久化的目的,但是這樣同樣也會造成一部分資源的浪費和更多互動的發生,不管是映射到宿主機上還是到網路磁盤,都是退而求其次的解決方案,
對比傳統虛擬機
| 特性 | Docker 容器 | 虛擬機 |
|---|---|---|
| 啟動 | 秒級 | 分鐘級 |
| 硬碟使用 | 一般為 MB | 一般為 GB |
| 性能 | 接近原生 | 弱于 |
| 系統支持量 | 單機支持上千個容器 | 一般幾十個 |
Docker版本
? 隨著Docker的不斷流行與發展,docker公司(或稱為組織)也開啟了商業化之路,Docker 從 17.03版本之后分為 CE(Community Edition) 和 EE(Enterprise Edition),我們來看看他們之前的區別于聯系,
版本區別
Docker EE
Docker EE由公司支持,可在經過認證的作業系統和云提供商中使用,并可運行來自Docker Store的、經過認證的容器和插件,
Docker EE提供三個服務層次:
| 服務層級 | 功能 |
|---|---|
| Basic | 包含用于認證基礎設施的Docker平臺 Docker公司的支持 經過 認證的、來自Docker Store的容器與插件 |
| Standard | 添加高級鏡像與容器管理 LDAP/AD用戶集成 基于角色的訪問控制(Docker Datacenter) |
| Advanced | 添加Docker安全掃描 連續漏洞監控 |
大家可在該頁查看各個服務層次的價目:https://www.docker.com/pricing
Docker CE
? Docker CE是免費的Docker產品的新名稱,Docker CE包含了完整的Docker平臺,非常適合開發人員和運維團隊構建容器APP,
? Docker公司認為,Docker CE和EE版本的推出為Docker的生命周期、可維護性以及可升級性帶來了巨大的改進,
版本說明
在此之前docker的最新版本更新到docker1.13,而在1.13的基礎之上,在2017年的3月1號開始,版本的格式變為如下
| 專案 | 說明 |
|---|---|
| 版本格式 | YY.MM |
| stable版本 | 每個季度發行 |
| edge版本 | 每個月發行 |
| 當前CE版本 | 17.03.0-ce |
小結
- Docker從17.03開始分為企業版與社區版,社區版并非閹割版,而是改了個名稱;企業版則提供了一些收費的高級特性,
- EE版本維護期1年;CE的stable版本三個月發布一次,維護期四個月;另外CE還有edge版,一個月發布一次,
Docker使用場景
- Web 應用的自動化打包和發布,
- 自動化測驗和持續集成、發布,
- 在服務型環境中部署和調整資料庫或其他的后臺應用,
- 從頭編譯或者擴展現有的OpenShift或Cloud Foundry平臺來搭建自己的PaaS環境
本文由傳智教育博學谷 - 狂野架構師教研團隊發布
如果本文對您有幫助,歡迎關注和點贊;如果您有任何建議也可留言評論或私信,您的支持是我堅持創作的動力
轉載請注明出處!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/502283.html
標籤:Java

