虛擬化要解釋清楚 Docker,,首先要解釋清楚容器(Container)的概念。要解釋容器的話,,就需要從操作系統(tǒng)說起,。操作系統(tǒng)太底層,細(xì)說的話一兩本書都說不清楚,。這里就一句話來總結(jié)一下:操作系統(tǒng)(Operating System,,簡稱OS)是管理計算機硬件與軟件資源的計算機程序,并且為軟件運行提供通用服務(wù)的系統(tǒng)軟件,。 隨著硬件的性能提升,,軟件種類的豐富,有兩種情況變得很常見:
為了解決軟件沖突,只能配置多臺計算機,,或者很麻煩的在同一臺電腦上安裝多個操作系統(tǒng),。顯然這兩個方案都有其缺點:多臺計算機成本太高,多操作系統(tǒng)的安裝,、切換都很麻煩,。在硬件性能過剩的時候,硬件虛擬化的普及就很自然而然的提出來了,。 所謂硬件虛擬化,,就是某個特殊的軟件,仿真出一臺或者多臺計算機的各種硬件,,用戶可以在這一臺虛擬機上安裝,、運行操作系統(tǒng)(一般叫來賓操作系統(tǒng),Guest OS)和各種應(yīng)用,,并且把 Guest OS 和上面應(yīng)用軟件對硬件資源的訪問轉(zhuǎn)發(fā)到底層的硬件上來實現(xiàn),。 對于 Guest OS 和上面的應(yīng)用程序來說,這臺虛擬機和普通物理計算機是完全一樣沒有任何區(qū)別的——除了性能可能差一點,。全球第一人氣的 VMware Workstation 就是這么一個軟件,,Oracle 的 VirtualBox 以及 Microsoft 的 Virtual PC 都是。這類軟件英語有一個專用的單詞是 Hypervisor(虛擬機管理程序),。 虛擬機的優(yōu)點可以把資源分配到不同的虛擬機,,達到硬件資源的最大化利用; 相比直接在物理機上部署應(yīng)用,,虛擬機更容易擴展應(yīng)用,; 云服務(wù):通過虛擬機虛擬出不同的物理資源,可以快速搭建云服務(wù),。
虛擬機的缺點虛擬機的缺點在于 Guest OS 通常會占用不少硬件資源,。例如 Windows 安裝 VMware 并開機 Guest OS,,不運行任何應(yīng)用的情況下,就需要占用 2 ~ 3G 內(nèi)存,,20 ~ 30G 硬盤空間,。而且為了應(yīng)用系統(tǒng)運行的性能,往往還要給每臺虛擬機留出更多的內(nèi)存容量,。雖然不少 Hypervisor 支持動態(tài)內(nèi)存,,但基本上都會降低虛擬機的性能。在這樣的資源占用情況下,,少量的虛擬機還是可以接受的,,如果同時運行十多臺或數(shù)十臺虛擬機,硬件資源的浪費就會成倍遞增,。通常來說,,其中相當(dāng)大一部分甚至全部 Guest OS 都是相同的。 能不能所有應(yīng)用使用同一個操作系統(tǒng)減少硬件資源的浪費,,但是又能避免包括運行庫在內(nèi)的軟件沖突呢,?操作系統(tǒng)層虛擬化——容器概念的提出,就是為了解決這個問題,。Docker 就是一個容器的標(biāo)準(zhǔn)化實現(xiàn),。 容器化容器技術(shù)已經(jīng)發(fā)展了很長一段時間了,例如:LXC,,BSD Jails,,Solaris Zones... 容器化就是應(yīng)用程序級別的虛擬化技術(shù)。容器提供了將應(yīng)用程序的代碼,、運行時,、系統(tǒng)工具、系統(tǒng)庫和配置打包到一個實例中的標(biāo)準(zhǔn)方法,。容器共享一個內(nèi)核(操作系統(tǒng)),,它安裝在硬件上。 和虛擬機相比,,容器有以下優(yōu)點:
Docker 歷史2010 年,幾個搞 IT 的年輕人,,在美國舊金山成立了一家名叫 dotCloud 的公司,。dotCloud 的平臺即服務(wù)(Platform-as-a-Service, PaaS)提供商。底層技術(shù)上,,dotCloud 平臺利用了 Linux 的 LXC 容器技術(shù),。 為了方便創(chuàng)建和管理這些容器,dotCloud 基于 Google 公司推出的 Go 語言開發(fā)了一套內(nèi)部工具,,之后被命名為 Docker,。Docker 就是這樣誕生的,。
如同 Docker 的 Logo 一樣,,Docker 的思想來源于集裝箱,。集裝箱解決了什么問題?在一艘大船上,,可以把貨物規(guī)整的擺放起來,,并且各種各樣的貨物被集裝箱標(biāo)準(zhǔn)化,集裝箱與集裝箱之間互不影響,。那么就不需要專門運送水果的船和專門運送化學(xué)用品的船了,。只要這些貨物封裝在不同的集裝箱里,就可以用一艘大船把它們都運走,。 Docker 技術(shù)誕生之后,,并沒有引起行業(yè)的關(guān)注。而 dotCloud 公司,,作為一家小型創(chuàng)業(yè)企業(yè),,在激烈的競爭之下,也步履維艱,。 正當(dāng)他們快要堅持不下去的時候,,腦子里蹦出了“開源”的想法。什么是“開源”,?開源,,就是開放源代碼。也就是將原來內(nèi)部保密的程序源代碼開放給所有人,,然后讓大家一起參與進來,,貢獻代碼和意見。 有的軟件一開始就是開源的,。也有的軟件,,是混不下去,創(chuàng)造者又不想放棄,,所以選擇開源,。自己養(yǎng)不活,就吃“百家飯”嘛,。2013 年 3 月,,dotCloud 公司的創(chuàng)始人之一,Docker 之父,,28 歲的 Solomon?Hykes 正式?jīng)Q定,,將 Docker 項目開源。 不開則已,,一開驚人,。越來越多的 IT 工程師發(fā)現(xiàn)了 Docker 的優(yōu)點,然后蜂擁而至,,加入 Docker 開源社區(qū),。Docker 的人氣迅速攀升,,速度之快,令人瞠目結(jié)舌,。 開源當(dāng)月,, Docker 0.1 版本發(fā)布。此后的每一個月,, Docker 都會發(fā)布一個版本,。到 2014 年 6 月 9 日, Docker 1.0 版本正式發(fā)布,。 此時的 Docker,,已經(jīng)成為行業(yè)里人氣最火爆的開源技術(shù),沒有之一,。甚至像 Google,、微軟、Amazon,、 VMware 這樣的巨頭們都對它青睞有加,,表示將全力支持。 Docker 火了之后,, dotCloud 公司干脆把公司名字也改成了 Docker Inc. ,。 為什么選擇 Docker更高效的利用系統(tǒng)資源 由于容器不需要進行硬件虛擬以及運行完整操作系統(tǒng)等額外開銷,Docker 對系統(tǒng)資源的利用率更高,。無論是應(yīng)用執(zhí)行速度,、內(nèi)存損耗或者文件存儲速度,,都要比傳統(tǒng)虛擬機技術(shù)更高效,。因此,相比虛擬機技術(shù),,一個相同配置的主機,,往往可以運行更多數(shù)量的應(yīng)用。 更快速的啟動時間 傳統(tǒng)的虛擬機技術(shù)啟動應(yīng)用服務(wù)往往需要數(shù)分鐘,,而 Docker 容器應(yīng)用,,由于直接運行于宿主內(nèi)核,無需啟動完整的操作系統(tǒng),,因此可以做到秒級,、甚至毫秒級的啟動時間。大大的節(jié)約了開發(fā),、測試,、部署的時間。 一致的運行環(huán)境 開發(fā)過程中一個常見的問題是環(huán)境一致性問題,。由于開發(fā)環(huán)境,、測試環(huán)境,、生產(chǎn)環(huán)境不一致,導(dǎo)致有些 bug 并未在開發(fā)過程中被發(fā)現(xiàn),。而 Docker 的鏡像提供了除內(nèi)核外完整的運行時環(huán)境,,確保了應(yīng)用運行環(huán)境一致性,從而不會再出現(xiàn)「這段代碼在我機器上沒問題啊」 這類問題,。 持續(xù)交付和部署 對開發(fā)和運維(DevOps)人員來說,,最希望的就是一次創(chuàng)建或配置,可以在任意地方正常運行,。 使用 Docker 可以通過定制應(yīng)用鏡像來實現(xiàn)持續(xù)集成,、持續(xù)交付、部署,。開發(fā)人員可以通過 Dockerfile 來進行鏡像構(gòu)建,,并結(jié)合持續(xù)集成(Continuous Integration)系統(tǒng)進行集成測試,而運維人員則可以直接在生產(chǎn)環(huán)境中快速部署該鏡像,,甚至結(jié)合持續(xù)部署(Continuous Delivery/Deployment)系統(tǒng)進行自動部署,。 而且使用 Dockerfile 使鏡像構(gòu)建透明化,不僅僅開發(fā)團隊可以理解應(yīng)用運行環(huán)境,,也方便運維團隊理解應(yīng)用運行所需條件,,幫助更好的在生產(chǎn)環(huán)境中部署該鏡像。 更輕松的遷移 由于 Docker 確保了執(zhí)行環(huán)境的一致性,,使得應(yīng)用的遷移更加容易,。Docker 可以在很多平臺上運行,無論是物理機,、虛擬機,、公有云、私有云,,甚至是筆記本,,其運行結(jié)果是一致的。因此用戶可以很輕易的將在一個平臺上運行的應(yīng)用,,遷移到另一個平臺上,,而不用擔(dān)心運行環(huán)境的變化導(dǎo)致應(yīng)用無法正常運行的情況。 更輕松的維護和擴展 Docker 使用的分層存儲以及鏡像的技術(shù),,使得應(yīng)用重復(fù)部分的復(fù)用更為容易,,也使得應(yīng)用的維護更新更加簡單,基于基礎(chǔ)鏡像進一步擴展鏡像也變得非常簡單,。此外,,Docker 團隊同各個開源項目團隊一起維護了一大批高質(zhì)量的 官方鏡像,既可以直接在生產(chǎn)環(huán)境使用,,又可以作為基礎(chǔ)進一步定制,,大大的降低了應(yīng)用服務(wù)的鏡像制作成本,。 容器與虛擬機的比較下面的圖片比較了 Docker 和傳統(tǒng)虛擬化方式的不同之處,可見容器是在操作系統(tǒng)層面上實現(xiàn)虛擬化,,直接復(fù)用本地主機的操作系統(tǒng),,而傳統(tǒng)方式則是在硬件層面實現(xiàn)。 與傳統(tǒng)的虛擬機相比,,Docker 優(yōu)勢體現(xiàn)為啟動速度快,、占用體積小。
您的 點贊 和 轉(zhuǎn)發(fā) 是對我最大的支持。 關(guān)注 哈嘍沃德先生「文檔 + 視頻」每篇文章都配有專門視頻講解,,學(xué)習(xí)更輕松噢 ~ |
|
來自: 常有理 > 《IT技術(shù)》