Docker--容器技術

CCE_huawei發表於2019-03-13

什麼是“容器”和“虛擬機器”

容器和虛擬機器它們的目的很相似:即將應用程式和它的依賴放到一個可以在任何環境執行的自足單元中。


此外,容器和虛擬機器消除了對物理硬體的需求,從而在能源消耗和成本效益方面能讓我們更有效地使用計算資源,


容器和虛擬機器的主要區別在於它們的架構方式。讓我們繼續深入瞭解。


虛擬機器

虛擬機器在本質上是對現實中計算機的模擬,它會像真實的計算機一樣執行程式。使用 “hypervisor” 可以將虛擬機器執行

於物理機上。hypervisor 可以在主機執行,也可以在“裸機”上執行。


讓我們來揭開這些術語的面紗:


hypervisor (之後都以虛擬機器管理程式稱呼)是能讓虛擬機器在其上執行的軟體,韌體或者硬體。虛擬機器管理程式本身會在

物理計算機上執行,稱為**“主機”**。主機為虛擬機器提供資源,包括 RAM 和 CPU。這些資源在虛擬機器之間被劃分並且

可以根據需要進行分配。所以如果一個虛擬機器上執行了資源佔用更大的應用程式,相較於其它執行在同一個主機的虛擬機器

你可以給其分配更多的資源。


執行在主機上的虛擬機器(再次說明,透過使用虛擬機器管理程式)通常也被叫做“訪客機”。訪客機包含了應用以及執行這

個應用所需要的全部依賴(比如:系統二進位制檔案和庫)。它還帶有一個自己的完整虛擬化硬體棧,包括虛擬化的網路適

配器,儲存和 CPU-這意味著它還擁有自己成熟的整個訪客作業系統。從虛擬機器內部來看,訪客機的操作都認為其使用的

都是自己的專用資源。從外部來看,我們知道它是一個虛擬機器-和其它虛擬機器一起共享主機提供的資源。


就像前面所提到的,訪客機既可以執行在託管的虛擬機器管理程式上,也可以執行在裸機虛擬機器管理程式上。它們之間存在

一些重要的差別。


首先,託管的虛擬化管理程式是在主機的作業系統上執行。比如說,可以在一臺執行 OSX 作業系統的計算機的系統上安裝

虛擬機器(例如:VirtualBox 或者 VMware Workstation 8)。虛擬機器無法直接訪問硬體,因此必須透過主機上執行的操作

系統訪問(在我們的例子中,也就是 Mac 的 OSX 作業系統)。


託管虛擬機器管理程式的好處是底層硬體並不那麼重要。主機的作業系統會負責硬體的驅動而不需要管理程式參與。因此這種

方式被認為具備更好的“硬體相容性”。在另一方面,在硬體和管理程式之間這個額外的附加層會產生更多的資源開銷

這會降低虛擬機器的效能。


裸機虛擬機器管理程式透過直接在主機硬體上安裝和執行來解決這個效能問題。因為它直接面對底層的硬體,所以並不需要

執行在主機的作業系統之上。在這種情況下,安裝在主機上第一個作為作業系統執行的就是這個裸機虛擬機器管理程式。與

託管虛擬機器管理程式不同,它有自己的裝置驅動直接與每個元件互動,以執行任何 I/O,處理或特定於作業系統的任務。

這樣可以獲得更好的效能,可伸縮性和穩定性。這裡的權衡在於其對硬體的相容性有限,因為裸機虛擬機器管理程式內建的

裝置驅動只有那麼多。


在討論了虛擬機器管理程式之後,你可能想知道為什麼我們需要在虛擬機器和主機之間這個額外的“虛擬機器管理程式”層。


好吧,虛擬機器管理程式在其中確實發揮了重要的作用,由於虛擬機器擁有自己的虛擬作業系統,管理程式為虛擬機器管理和

執行訪客作業系統提供了一個平臺。它允許主機與作為客戶端執行的虛擬機器之間共享其資源。



虛擬機器圖示


正如你可以在圖示中所看到的,VMS 會為每個新的虛擬機器打包虛擬硬體,一個核心(即作業系統)和使用者空間。


容器

與提供硬體虛擬化的虛擬機器不同,容器透過抽象“使用者空間”來提供作業系統級別的虛擬化。當我們詳解容器這個術語的

時候你就會明白我的意思。


從所有的意圖和目的來看,容器看起來就像一個虛擬機器。比如說,它們有執行程式的私有空間,可以使用 root 許可權執行命

令,具有專有的網路介面和 IP 地址,允許自定義路由和 iptable 規則,可以掛載檔案系統等。


容器和虛擬機器之間的一個重要區別在於容器和其它容器共享主機系統的核心。



容器圖示


這圖表明容器只會打包使用者空間,而不是像虛擬機器那樣打包核心或虛擬硬體。每個容器都有自己獨立的使用者空間從而可以

讓多個容器在單個主機上執行。我們可以看到所有作業系統級別的體系架構是所有容器共享的。要從頭開始建立的部分只有

 bins 和 libs 目錄。這就是容器如此輕巧的原因。


Docker 是從哪來的?

Docker 是基於 Linux 容器技術的開源專案。它使用 Luinux 的核心功能(如名稱空間和控制組)在作業系統上建立容器。


容器已經遠遠不是一個新技術:Google 已經使用他們自己的容器技術好多年了。其它的容器技術包括 Solaris Zones、

BSD jails 和 LXC 也已經存在好多年。


那麼為啥 Docker 會突然取得成功呢?


使用簡單 :Docker 使得任何人(開發人員,運維,架構師和其他人)都可以更輕鬆的利用容器的優勢來快速構建和測試可

移植的應用程式。它可以讓任何人在他們的膝上型電腦上打包應用程式,不需要任何修改就可以讓應用執行在公有云,私有

雲甚至裸機上。Docker 的口頭禪是:“一次構建,處處執行”。


速度 :Docker 容器非常輕量級和快速。因為容器只是執行在核心上的沙盒環境,因此它們佔用的資源更少。與可能需要更

多時間來建立的虛擬機器相比,你可以在幾秒鐘內建立一個 Docker 容器,因為虛擬機器每次都必須啟動一個完整的作業系統。


Docker Hub :Docker 使用者也可以從日益豐富的 Docker Hub 生態中受益,你可以把 Docker Hub 看作是 “Docker 鏡

像的應用商店”。Docker Hub 擁有數萬個由社群構建的公共映象,這些映象都是隨時可用的。在其中搜尋符合你需求的鏡

像非常容易,你只需要準備拉取映象而且幾乎不需要任何修改。


模組化和可擴充套件性 :Docker 可以讓你輕鬆地把應用程式按功能拆分為單個獨立的容器。比如說,你的 Postgre 資料庫可以

執行在一個容器中,Redis 服務執行在另一個容器中,而 Node.js 應用執行在另一個容器中。使用 Docker,將這個容器鏈

接在一起以建立你的應用程式將會變得更簡單,同時在將來可以很輕鬆地擴充套件和更新單獨的元件。最後但並不重要的是,有

誰不喜歡 Docker 的鯨魚(Docker 的標誌)呢?:)



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69908804/viewspace-2638264/,如需轉載,請註明出處,否則將追究法律責任。

相關文章