詳情:https://blog.csdn.net/deng624796905/article/details/86493330
Docker是什麼?
我們在理解 docker
之前,首先我們得先區分清楚兩個概念,容器和虛擬機。
可能很多讀者朋友都用過虛擬機,而對容器這個概念比較的陌生。
我們用的傳統虛擬機如 VMware
, VisualBox
之類的需要模擬整臺機器包括硬件,每臺虛擬機都需要有自己的操作系統,虛擬機一旦被開啓,預分配給它的資源將全部被佔用。每一臺虛擬機包括應用,必要的二進制和庫,以及一個完整的用戶操作系統。
而容器技術是和我們的宿主機共享硬件資源及操作系統,可以實現資源的動態分配。容器包含應用和其所有的依賴包,但是與其他容器共享內核。容器在宿主機操作系統中,在用戶空間以分離的進程運行。
容器技術是實現操作系統虛擬化的一種途徑,可以讓您在資源受到隔離的進程中運行應用程序及其依賴關係。通過使用容器,我們可以輕鬆打包應用程序的代碼、配置和依賴關係,將其變成容易使用的構建塊,從而實現環境一致性、運營效率、開發人員生產力和版本控制等諸多目標。容器可以幫助保證應用程序快速、可靠、一致地部署,其間不受部署環境的影響。容器還賦予我們對資源更多的精細化控制能力,讓我們的基礎設施效率更高。通過下面這幅圖我們可以很直觀的反映出這兩者的區別所在。
Docker 屬於 Linux 容器的一種封裝,提供簡單易用的容器使用接口。它是目前最流行的 Linux
容器解決方案。
而 Linux
容器是 Linux
發展出了另一種虛擬化技術,簡單來講, Linux
容器不是模擬一個完整的操作系統,而是對進程進行隔離,相當於是在正常進程的外面套了一個保護層。對於容器裏面的進程來說,它接觸到的各種資源都是虛擬的,從而實現與底層系統的隔離。
Docker
將應用程序與該程序的依賴,打包在一個文件裏面。運行這個文件,就會生成一個虛擬容器。程序在這個虛擬容器裏運行,就好像在真實的物理機上運行一樣。有了 Docker
,就不用擔心環境問題。
總體來說, Docker
的接口相當簡單,用戶可以方便地創建和使用容器,把自己的應用放入容器。容器還可以進行版本管理、複製、分享、修改,就像管理普通的代碼一樣。
Docker的優勢
Docker相比於傳統虛擬化方式具有更多的優勢:
docker
啓動快速屬於秒級別。虛擬機通常需要幾分鐘去啓動docker
需要的資源更少,docker
在操作系統級別進行虛擬化,docker
容器和內核交互,幾乎沒有性能損耗,性能優於通過Hypervisor
層與內核層的虛擬化docker
更輕量,docker
的架構可以共用一個內核與共享應用程序庫,所佔內存極小。同樣的硬件環境,Docker
運行的鏡像數遠多於虛擬機數量,對系統的利用率非常高- 與虛擬機相比,
docker
隔離性更弱,docker
屬於進程之間的隔離,虛擬機可實現系統級別隔離 - 安全性:
docker
的安全性也更弱。Docker
的租戶root
和宿主機root
等同,一旦容器內的用戶從普通用戶權限提升爲root權限,它就直接具備了宿主機的root權限,進而可進行無限制的操作。虛擬機租戶root
權限和宿主機的root
虛擬機權限是分離的,並且虛擬機利用如Intel
的VT-d
和VT-x
的ring-1
硬件隔離技術,這種隔離技術可以防止虛擬機突破和彼此交互,而容器至今還沒有任何形式的硬件隔離,這使得容器容易受到攻擊 - 可管理性:
docker
的集中化管理工具還不算成熟。各種虛擬化技術都有成熟的管理工具,例如VMware vCenter
提供完備的虛擬機管理能力 - 高可用和可恢復性:
docker
對業務的高可用支持是通過快速重新部署實現的。虛擬化具備負載均衡,高可用,容錯,遷移和數據保護等經過生產實踐檢驗的成熟保障機制,VMware
可承諾虛擬機99.999%
高可用,保證業務連續性 - 快速創建、刪除:虛擬化創建是分鐘級別的,
Docker
容器創建是秒級別的,Docker
的快速迭代性,決定了無論是開發、測試、部署都可以節約大量時間 - 交付、部署:虛擬機可以通過鏡像實現環境交付的一致性,但鏡像分發無法體系化。
Docker
在Dockerfile
中記錄了容器構建過程,可在集羣中實現快速分發和快速部署
我們可以從下面這張表格很清楚地看到容器相比於傳統虛擬機的特性的優勢所在:
特性 | 容器 | 虛擬機 |
---|---|---|
啓動 | 秒級 | 分鐘級 |
硬盤使用 | 一般爲MB | 一般爲GB |
性能 | 接近原生 | 弱於 |
系統支持量 | 單機支持上千個容器 | 一般是幾十個 |
Docker的三個基本概念
從上圖我們可以看到,Docker
中包括三個基本的概念:
Image
(鏡像)Container
(容器)Repository
(倉庫)
鏡像是 Docker
運行容器的前提,倉庫是存放鏡像的場所,可見鏡像更是 Docker
的核心。
Image (鏡像)
那麼鏡像到底是什麼呢?
Docker
鏡像可以看作是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之後也不會被改變。
鏡像(Image)
就是一堆只讀層(read-only layer)
的統一視角,也許這個定義有些難以理解,下面的這張圖能夠幫助讀者理解鏡像的定義。