原文:
上一章,介紹了虛擬化技術的優點,下面介紹容器技術。
(一)容器
docker 使用 google 公司推出的 go 語言 進行開發實現,基於 linux 核心的cgroup,namespace,以及 aufs 類的 union fs 等技術,對程序進行封裝隔離,屬於 作業系統層面的虛擬化技術。由於隔離的程序獨立於宿主和其它的隔離的程序,因此也稱其為容器。
(二)容器的概念
一般來說,虛擬機器都會有自己的kernel,自己的硬體,這樣虛擬機器啟動的時候需要先做開機自檢,啟動kernel,啟動使用者程序等一系列行為,雖然現在電腦執行速度挺快,但是這一系列檢查做下來,也要幾十秒,也就是虛擬機器需要幾十秒來啟動。
重新來理解虛擬機器的概念,計算機科學家發現其實我們建立虛擬機器也不一定需要模擬硬體的輸入和輸出,假如宿主機和虛擬機器他們的kernel是一致的,就不用做硬體輸入輸出的搬運工了,只需要做kernel輸入輸出的搬運工即可,為了有別於硬體層面的虛擬機器,這種虛擬機器被命名為 作業系統層虛擬化:operating-system-level virtualization也被叫做容器
讓我們來回顧虛擬機器的概念,在虛擬機器的系統中,虛擬機器認為自己有獨立的檔案系統,程序系統,記憶體系統,等等一系列,所以為了讓容器接近虛擬機器,也需要有獨立的檔案系統,程序系統,記憶體系統,等等一系列,為了達成這一目的,主機系統採用的辦法是:只要隔離容器不讓它看到主機的檔案系統,程序系統,記憶體系統,等等一系列,那麼容器系統就是乙個接近虛擬機器的玩意了
(三)容器框架
docker使用乙個客戶端伺服器架構。docker客戶端和docker守護程序交流,docker守護程序做非常重要的工作,構建,執行和分發你的docker容器。docker客戶端和守護程序可以執行在同樣的系統上,或者是你可以連線乙個docker客戶端到乙個遠端docker守護程序中。docker客戶端和守護程序通過sockets或通過restful api進行溝通交流。
圖1 容器架構
(四)容器內部
要理解 docker 內部構建,需要理解以下三種部件:
docker 映象 - docker images
docker 倉庫 - docker registeries
docker 容器 - docker containers
1.docker 映象
docker 映象是 docker 容器執行時的唯讀模板,每乙個映象由一系列的層 (layers) 組成。docker 使用 unionfs 來將這些層聯合到單獨的映象中。unionfs 允許獨立檔案系統中的檔案和資料夾(稱之為分支)被透明覆蓋,形成乙個單獨連貫的檔案系統。正因為有了這些層的存在,docker 是如此的輕量。當你改變了乙個 docker 映象,比如公升級到某個程式到新的版本,乙個新的層會被建立。因此,不用替換整個原先的映象或者重新建立(在使用虛擬機器的時候你可能會這麼做),只是乙個新 的層被新增或公升級了。現在你不用重新發布整個映象,只需要公升級,層使得分發 docker 映象變得簡單和快速。
2.docker 倉庫
docker 倉庫用來儲存映象,可以理解為**控制中的**倉庫。同樣的,docker 倉庫也有公有和私有的概念。公有的 docker 倉庫名字是 docker hub。docker hub 提供了龐大的映象集合供使用。這些映象可以是自己建立,或者在別人的映象基礎上建立。docker 倉庫是 docker 的分發部分。
3.docker 容器
docker 容器和資料夾很類似,乙個docker容器包含了所有的某個應用執行所需要的環境。每乙個 docker 容器都是從 docker 映象建立的。docker 容器可以執行、開始、停止、移動和刪除。每乙個 docker 容器都是獨立和安全的應用平台,docker 容器是 docker 的執行部分。
(五)為什麼使用容器
1.更高效的利用系統資源
2.更快速的啟動時間
3.一致的執行環境
開發過程中乙個常見的問題是環境一致性問題。由於開發環境、測試環境、生產環境不一致,導致有些 bug 並未在開發過程中被發現。而 docker 的映象提供了除核心外完整的執行時環境,確保了應用執行環境一致性,從而不會再出現這類問題。
4.持續交付和部署
5.更輕鬆的遷移
6.更輕鬆的維護和擴充套件
(六)容器與傳統虛擬機器比較
傳統虛擬機器技術是虛擬出一套硬體後,在其上執行乙個完整作業系統,在該系統上再執行所需應用程序;而容器內的應用程序直接執行於宿主的核心,容器內沒有自己的核心,而且也沒有進行硬體虛擬。因此容器要比傳統虛擬機器更為輕便。
圖2 傳統虛擬機器
圖3 容器
圖4 傳統虛擬機器與容器對比
辨析物理機 虛擬機器 容器的比較
虛擬機器 vm 是計算機系統的 簡而言之,它可以在實際上是一台計算機的硬體上執行看似 多台單獨的計算機。作業系統 os 及其應用程式共享來自單個主機伺服器或主機伺服器池的硬體資源。每個vm都需要其自己的 基礎os,並且硬體已虛擬化 系統管理程式或虛擬機器監視器是建立和執行vm的軟體,韌體或硬體。它位...
虛擬機器和容器比較
容器相比虛擬機器更輕量 一 虛擬機器 二 容器 一 本質上的區別 vm vmware 在宿主機器 宿主機器作業系統的基礎上建立虛擬層 虛擬化的作業系統 虛擬化的倉庫,然後再安裝應用 container docker容器 在宿主機器 宿主機器作業系統上建立docker引擎,在引擎的基礎上再安裝應用。那...
比較VMware ESX虛擬機器的物理與虛擬硬體
通過使用軟體,虛擬機器就表現得如同物理機,擁有自己的一套虛擬硬體,包括其上載入的作業系統和應用。使用虛擬化,不管下面主機伺服器所執行的作業系統如何,每台虛擬機器都擁有一致的虛擬硬體。這一系列的文章旨在幫助vmware系統管理員更好地理解虛擬機器的內部工作,有助於每天對基礎架構的管理。除了硬碟,多數虛...