Docker簡介

找了好多關於docker的文章作爲了解,還是這篇比較通俗一點,作爲收藏,轉載:http://blog.csdn.net/u013782203/article/details/51597672

Docker 簡介

這裏通過使Doker與虛擬主機VM作比較,來了解Docker;

Docker 解決了什麼問題

Docker 和虛擬主機(VM)要解決的問題是非常類似的:

  1. 在同一臺主機上運行不同的程序,而這些不同的程序之間有可能存在依賴衝突的情況;
  2. 即使依賴衝突能在同一臺主機上解決,但隨着運行的程序的數量互相交織,維護的成本也將會成指數上升;
  3. 程序開發過程中,由於硬件、操作系統的細微差別,在多人共同開發和部署到生產環境上後,可能會出現難以被排查出來的問題;
  4. 分佈式/集羣環境的程序分發和環境配置問題;
  5. 硬件資源的利用率;

Docker 和 VM 之間的區別

因爲這樣,以致於很多人認爲 Docker 也是一種虛擬化技術,實際上我更傾向於稱其爲容器化/沙盒化技術。

借用以下兩張圖來對比說明

 docker-intro-01docker-intro-02

=== 從硬件資源利用情況看 ===

虛擬機(VM)實際上利用了虛擬化的技術,獲取了主機上實際的硬件資源(內存、CPU),通過獲取到的硬件資源重新構建一個接近於真實的機器,而這部分被分配過的硬件資源(比如 512MB 內存)在虛擬機啓動了以後,不管是否真的有使用到了,對於主機來說就真的少了這部分的資源了( 可用內存 = 物理內存 - 512MB);

而 Docker 利用的是 Linux 主機上的內核技術,當一個容器在運行的時候,實際上是“映射”成主機上的一批進程,這些進程相互獨立,共享主機的硬件資源,假設容器1運行 MySQL 佔用了 100MB 內存,容器2運行 nginx 佔用 50MB 內存,在理論上(不計算容器本身的損耗的話)主機當前剩餘可用內存 = 物理內存 - 100MB - 50MB;

=== 從程序運行歸屬情況看 ===

VM中的程序,是在隔離於主機的一個獨立的操作系統(GuestOS)中運行的,程序運行的前提是 GuestOS 處於啓動的狀態,而程序運行後對於主機來說是完全透明的,主機無法看到VM中運行了什麼進程;

而在 Docker 容器中運行的程序,只是隔離了程序的依賴關係(Bins/Libs),程序的執行者還是屬於主機的,對主機來說所有容器在執行的程序都是主機的進程,不存在 GuestOS 所以也不存在需要啓動 GuestOS;

=== 從對主機操作系統的依賴看 ===

VM依賴的是虛擬化技術(Hypervisor),當具體使用的技術是在對應的平臺下能運行的話,該操作系統平臺就可以創建VM並運行;

而 Docker 的運行原理是基於 LXC,這是基於 Linux 內核版本 2.6.24+ 以上纔有的技術,所以依賴於 Linux,在其它平臺上(Windows、OSX)無法直接使用(但可通過VM創建一個Linux系統來使用);

=== Docker Logo 的解讀 ===

其實 Docker 的 Logo 很形象的說明了它自身的概念

docker-intro-03

鯨魚通過身上的集裝箱(Container)來將不同種類的貨物進行隔離;而不是通過生出很多小鯨魚(Guest OS)來承運不同種類的貨物。

具體使用Docker的關聯網址:http://www.runoob.com/docker/docker-tutorial.html點擊打開鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章