Docker概述:什么Docker如此特別,它是如何構建的

櫻桃大丸子 8年前發布 | 29K 次閱讀 Docker

【編者的話】在上一系列介紹中,我們大體地介紹了CoreOS。在這個系列中我想介紹一下Docker。本文我們看一下為什么Docker如此特別,它是如何構建的。我們會從基本開始介紹,所以讀者不必擔心自己是剛接觸Docker的。

@Container容器技術大會將于6月4日在上海光大會展中心國際大酒店舉辦,來自Rancher、攜程、PPTV、螞蟻金服、京東、浙江移動、海爾電器、唯品會、eBay、道富銀行、麻袋理財、土豆網、阿里百川、騰訊游戲、點融網等公司的技術負責人將帶來實踐經驗分享,5月7日之前購票只需438元,歡迎感興趣的同學搶購。

Docker是一個開源項目,它以基于Linux操作系統級鏡像來提供一個抽象的、自動分發的虛擬化附加層,通過該層使得在容器中更加容易打包應用。

容器本身僅是基于Linux的cgroups的一個抽象實現,cgroups是用于監控和限制進程及其子進程占用資源的底層內核結構。Dokcer一開始是采用LinuX Contrainers(LXC)的,但是后來切換到runC,前者(LXC)以libcontainer被熟知。runC則是跑在跟宿主相同的操作系統,這使得它可以共享很多宿主的操作系統資源,如RAM、CPU、網絡等。

為何Docker如此特別?

Docker在虛擬的容器環境之上增加一個應用部署引擎。它是一個輕量級但十分強大的關于虛擬化技術的開源容器,在容器中還整合了構建并容器化應用的工作流程。

好處:

  • Docker可以使你迅速地根據組件組合出應用,并消除代碼分發過程中遇到的障礙。例如你可以在同一個主機上運行兩個應用相同但版本不同的Docker容器。
  • Docker使你的代碼盡可能快的通過測試并部署到生成環境。
  • Docker難以置信的簡單易用。無論是在簡易版Linux、OSX,還是Windows主機上都可以開始學習Docker。(Windows需要直接運行兼容Linux內核或者運行Docker鏡像的虛擬機),
  • 你可以在幾分鐘之內容器化你的應用。大多數Docker容器在一秒內即可啟動。
  • Docker容器幾乎可以在任何地方運行。你可以在臺式機、物理服務器、虛擬機上部署容器到數據中心,上傳到公有云和私有云均可。這樣,你就可以在任何地方運行完全一樣的容器。


在我們繼續討論Docker驚艷的容器化特征之前,我們先看一下虛擬機和容器的區別。

虛擬機和容器的區別

容器與虛擬機享有相似的資源隔離和分配,但是容器有一套不同的架構方式使得它本身更加便攜和高效。我們看下面兩個演示二者差別的兩個表。

虛擬機

每一個虛擬機包括應用、必要的二進制文件和庫、完整的客戶操作系統,大小總計數十GB。

Docker概述:什么Docker如此特別,它是如何構建的

 

容器

容器包括應用和應用的所有依賴,每個容器都使用容器自身選擇的發行版本,但是與其他容器共享宿主操作系統的內核。

在宿主操作系統的用戶空間內,他們以隔離的進程方式運行。另外,他們并不像客戶操作系統正常運行那樣運行所有的進程。而且容器也不綁定任何特別的硬件基礎設施!Docker容器在任何計算機任何硬件基礎設施任何云都可以運行。

Docker概述:什么Docker如此特別,它是如何構建的


重要的是,虛擬機需要耗時幾分鐘來啟動,而且對資源敏感,然后容器只需要幾秒甚至更少時間啟動,在資源較少負載過大時也能應付的了。所以,你可以在本地計算機運行很少的幾個虛擬機用于開發目的,但是你可以運行很多很多的容器。這可以使你在開發環境中高效的運行應用環境的完整備份。而且,在生成環境中,這些資源節約很容易轉化為成本節約。

容器組件

Docker容器有一些頂層的組件需要我們先要了解,讓我們看一下。

Docker客戶端和服務端

Docker是C/S應用。

Docker概述:什么Docker如此特別,它是如何構建的


Docker客戶端跟服務器(守護程序)通信,服務器來做所有的工作。Docker通過包含命令行客戶端(供Linux、OS X和Windows使用)和完整RESTful接口的二進制文件來分發。你可以在一臺Linux主機上運行Docker守護進程和客戶端,或者將你的本地Docker客戶端連接到另一臺Linux主機的遠程Docker守護進程。

Docker鏡像

Docker鏡像是Docker的構建基石。這些鏡像是Docer生命周期中的構建部分。他們是一種分層的形式,根據一系列說明一步一步構建產生的統一文件系統。Dockefile是一個文本文檔,它包含用戶可以在命令行調用的所有命令從而組成一個鏡像。使用一個基本的Docker鏡像,可以添加、拷貝文件、執行命令、開放端口。

你可以認為Docker文件是一種源碼,而鏡像是為產生容器而被編譯的代碼,而容器則是運行時代碼。Docker文件具有高度的便攜性,可以隨時共享、存儲和更新。

注冊服務

一旦你構建出一個鏡像,你就可以在注冊服務中存儲它。注冊服務有:公共的和私有的。像Docker Hub、Quay.io、Container Registery by Google Cloud的注冊服務都有公共和私有的選項。你當然也可以在自己機器上運行一個自己的私有注冊服務。

容器

容器是鏡像的一個運行版本。

你可以認為鏡像是Docker的構建或者編譯的一面,而容器是Docker的運行或者執行的一面。

容器的生命周期跟你在容器里執行的命令的生命周期是一致的。一個容器可以只執行一個單個命令后立刻結束,或者可以讓容器跟隨耗時的命令一直運行。

總結

在本文我們講述了:

  • 什么使得Docker如此特別
  • 虛擬機和容器的主要區別
  • 組成Docker的主要組件


在我的下一篇博文中,我們將介紹啟動容器、構建鏡像,并在數據分區中工作的內容

原文鏈接:Docker Overview, Part One(翻譯:姜俊厚)

來源:http://dockone.io/article/1160

 本文由用戶 櫻桃大丸子 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!