docker的基本概述簡介

2021-10-24 08:34:45 字數 3538 閱讀 9770

docker本質上是乙個採用虛擬化技術的容器,基於linux容器進行再封裝,使使用者不用關心容器的管理,而簡化應用操作。從2013開始有這個專案到現在也不過5年時間,但是發展應用卻極其迅速,主要原因就是應用簡單方便,傳統的虛擬化是基於硬體實現的,如果要部署10個應用,則需要建立10個虛擬機器,而docker是基於作業系統做的虛擬化,也就是復用本地主機的作業系統,部署運營10個應用時只需要起10個隔離的應用即可。

虛擬機器與容器區別

啟動時間:docker秒級啟動,虛擬機器分鐘級啟動。

輕量級:docker映象大小通常以m為單位,虛擬機器以g為單位。容器資源占用小,要比虛擬機器部署更快速。

效能:docker共享宿主機核心,系統級虛擬化,占用資源少,沒有hypervisor層開銷,效能基本接近物理機; 虛擬機器需要hypervisor層支援,虛擬化一些裝置,具有完整的guestos,虛擬化開銷大,因而降低效能,沒有容器效能好。

安全性:由於共享宿主機核心,只是程序級隔離,因此隔離性和穩定性不如虛擬機器,docker具有一定許可權訪問宿主機核心,存在一定安全隱患。

使用要求:vm基於硬體的完全虛擬化,需要硬體cpu虛擬化技術支援; docker共享宿主機核心,可執行在主流的linux發行版,不用考慮cpu是否支援虛擬化技術。

docker核心解決的問題是利用lxc來實現類似vm的功能,從而利用更加節省的硬體資源提供給使用者更多的計算資源。同vm的方式不同, lxc 其並不是一套硬體虛擬化方法 - 無法歸屬到全虛擬化、部分虛擬化和半虛擬化中的任意乙個,而是乙個作業系統級虛擬化方法, 理解起來可能並不像vm那樣直觀。所以我們從虛擬化到docker要解決的問題出發,看看他是怎麼滿足使用者虛擬化需求的。

使用者需要考慮虛擬化方法,尤其是硬體虛擬化方法,需要借助其解決的主要是以下4個問題:

隔離性- 每個使用者例項之間相互隔離, 互不影響。 硬體虛擬化方法給出的方法是vm, lxc給出的方法是container,更細一點是kernel namespace

可配額/可度量- 每個使用者例項可以按需提供其計算資源,所使用的資源可以被計量。硬體虛擬化方法因為虛擬了cpu, memory可以方便實現, lxc則主要是利用cgroups來控制資源

移動性- 使用者的例項可以很方便地複製、移動和重建。硬體虛擬化方法提供snapshot和image來實現,docker(主要)利用aufs實現

安全性- 這個話題比較大,這裡強調是host主機的角度盡量保護container。硬體虛擬化的方法因為虛擬化的水平比較高,使用者程序都是在kvm等虛擬機器容器中翻譯執行的, 然而對於lxc, 使用者的程序是lxc-start程序的子程序, 只是在kernel的namespace中隔離的, 因此需要一些kernel的patch來保證使用者的執行環境不會受到來自host主機的惡意入侵, dotcloud(主要是)利用kernel grsec patch解決的.、

1、docker client 客戶端

2、docker daemon 守護程序

docker是c/s架構的程式,docker的客戶端向守護程序發起請求,守護程序處理完成後返回結果。

docker客戶端既可以在本底訪問守護程序,也可以遠端訪問守護程序。

3、docker image 映象

映象是容器的基石,容器基於映象啟動,映象就像是容器的源**,儲存了用於容器啟動的各種條件。

映象是乙個層疊的唯讀檔案系統,結構如下

bootfs 引導檔案系統,很像傳統的linux引導檔案系統

rootfs root檔案系統,可以是一種或多種作業系統,如ubuntu或centos,root檔案系統永遠只能是唯讀狀態

union mount 聯合載入技術,一次載入多個唯讀檔案系統到rootfs系統之上。在外圍看到的只是乙個檔案系統,聯合載入使各層檔案系統疊加到一起,使最終的檔案系統包含所有底層檔案系統和目錄,這樣的檔案系統就是映象

乙個映象可以放到另乙個映象的頂部,位於下邊的映象叫做父映象,依次類推,最底部的映象叫做基礎映象,指的是rootfs

4、docker container 容器

通過映象啟動:容器是docker的執行單元。

啟動和執行:映象如果是構建和打包階段,則容器是啟動和執行階段

容器啟動過程:啟動時在映象的最頂層加乙個可寫的檔案系統,即可寫層。docker中執行的程式就是在這個層中執行的。docker第一次啟動乙個容器時,可寫層是空的,當檔案系統發生變化,都會應用到這一層。如果想修改乙個檔案,該檔案首先會從可讀寫層下邊的唯讀層複製到該讀寫層,該檔案的唯讀版本依然存在,但是已經被讀寫層中的該檔案副本所隱藏。這個是docker的重要機制,寫時複製(copy on write)

當建立乙個新容器時,docker構建出乙個映象棧,在棧的最頂層新增可寫層,這個讀寫層加上下邊的映象層及配置資料就構成了乙個容器。如下圖

5、docker registry 倉庫

存放使用者構建的映象,倉庫分為公有和私有,共有是指docker hub。

優點:

1.更快速的交付於部署:快速建立容器,快速迭代應用,秒級啟動,全程視覺化

2.更高效的虛擬化:核心級虛擬化,不需要額外的hypervisor

3.更輕鬆的遷移和擴充套件:可以在任意的平台上執行,應用程式可以直接跨平台遷移

4.更簡單的管理:以增量式進行修改和發布,實現自動化管理

缺點:

1.docker是基於linux 64bit的,無法在32bit的linux/windows/unix環境下使用

2.lxc是基於cgroup等linux kernel功能的,因此container的guest系統只能是linux base的

3.隔離性相比kvm之類的虛擬化方案還是有些欠缺,所有container公用一部分的執行庫

4.網路管理相對簡單,主要是基於namespace隔離

5.cgroup的cpu和cpuset提供的cpu功能相比kvm的等虛擬化方案相比難以度量(所以dotcloud主要是按記憶體收費)

6.docker對disk的管理比較有限

7.container隨著使用者程序的停止而銷毀,container中的log等使用者資料不便收集

Docker基本原理概述

docker基本原理概述 docker是乙個用於開發,交付和執行應用程式的開放平台。docker能夠將應用程式與基礎架構分開,從而可以快速交付軟體。借助docker,可以以與管理應用程式相同的方式來管理基礎架構。通過利用docker的快速交付,測試和部署 的方法,可以顯著減少編寫 和在生產環境中執行...

Docker簡介與基本概念

docker最初是dotcloud公司創始人solomon hykes發起的乙個公司內部專案,它是基於dotcloud公司多年雲服務技術的一次革新,並於2013年3月以 apache 2.0授權協議開源,主要專案 在github上進行維護。docker專案後來還加入了linux 會,並成立推動開放容...

docker命令概述

映象操作 列出docker所有映象 docker images repository 映象所在倉庫名稱 tag 映象標籤 image id 映象id created 映象建立日期 size 映象大小 搜尋映象 docker search 映象名稱 name 倉庫名稱 description 映象描述...