1. 程式人生 > 實用技巧 >Docker 入門

Docker 入門

Docker 入門

首發:arppinging

一、Docker是什麼?

Docker是一種容器技術,也是虛擬化技術的一種。

1)虛擬化技術分類

1.1 主機級虛擬化

主機級虛擬化可以分為兩種,分別是Type-Ⅰ和Type-Ⅱ,下面分別介紹這兩種主機虛擬化。

1.1.1 Type-Ⅰ

主機級虛擬化Type-Ⅰ

Type-Ⅰ的主機級虛擬化,直接在物理硬體上面安裝虛擬化作業系統,如Vmware的ESXi,然後在虛擬化層上安裝虛擬機器。

1.1.2 Type-Ⅱ

主機級虛擬化Type-Ⅱ

Type-Ⅱ主機級虛擬化:在原有的作業系統上面安裝虛擬化軟體,比如vmware workstation等,再在虛擬化軟體上建立作業系統。

1.2 容器級虛擬化

容器級虛擬化

可以看出,在容器級虛擬化中,容器中是沒有獨立的作業系統核心的,容器直接部署在主機的作業系統上。

1.3 幾種虛擬化技術的優劣

1、type-Ⅰ虛擬化:每個虛擬機器都有自己獨立的系統核心,可以直接通過虛擬化層和硬體互動。
2、Type-Ⅱ虛擬化:每個虛擬機器都有自己獨立的作業系統,想比type-Ⅰ,增加了一層虛擬化軟體,而虛擬化軟體本身可能會存在安全風險。
3、容器級虛擬化:在容器級虛擬化中,所有的容器都共享一個核心,在隔離性方面沒有主機級虛擬化那麼徹底。

2)Docker的優勢

1、docker容器啟動速度快,大多數docker容器只需要不到1s的時間即可啟動。
2、docker建模簡單、快捷,使用者只需要幾分鐘即可把自己的程式“docker化”

3、使職責的邏輯分離,開發人員只需要關心容器中執行的應用程式,而運維人員只需要關心如何管理容器即可。
4、快速、高效的開發生命週期,docker具有很高的移植性。
5、docker使得分散式應用程式部署更加方面。

二、docker元件

1) Docker客戶端和伺服器

Docker是一個C/S架構的程式,Docker客戶端只需向伺服器或守護程序發出請求,伺服器或守護程序將完成所有的工作並返回結果。
客戶端和伺服器可以在同一臺伺服器上,也可以是不同的機器。可以將伺服器理解為nginx服務,客戶端理解為web瀏覽器即可。

Docker C/S架構

2) Docker映象

映象時Docker的基石,使用者基於映象執行容器。映象類似於可匯入vmware workstation 執行的ova檔案,只不過docker的映象只需要建立和執行即可,不需要再次構建系統核心。映象就是容器的“原始碼”,體積小、易分享和更新。

3) Registry

Registry是存放映象的倉庫,Registry分為公共和私有兩種,Docker公司運營的公共Registry叫作Docker Hub,私有的一般是公司內部的映象倉庫。

4) 容器

容器是基於映象啟動起來的,容器中可以執行一個或多個程序。可以認為,映象是Docker生命週期中的構建或者打包階段,而容器則是啟動或執行階段。

如果說映象類似於OVA檔案,那麼容器就類似於我們將OVA檔案匯入vmware workstation 中,然後點選執行的狀態。

每個容器都包含一個映象,如果將容器看成一個集裝箱(下圖用貨車表示),那麼映象就是裡面的貨物。
圖1

映象(貨物)可以被建立、啟動、關閉、重啟以及銷燬,就類似於裝貨、卸貨這種操作。docker並不關心容器裡面到底是什麼,是web服務?還是資料庫?不管是什麼,docker都會以統一的標準進行“裝載”。

總結起來,Docker容器就是:

  1. 一個映象格式
  2. 一系列標準的操作
  3. 一個執行環境
    docker容器還非常易於移動,我們可以將進行傳到映象倉庫,然後在任意的地方和機器上執行。

三、Docker的技術元件

Docker可以執行在任何安裝了64bit Linux的主機上,docker開銷低,但主機上還應該支援以下功能:

3.1 一個原生的Linux容器格式

Docker稱為libcontainer。因為不論是什麼映象,docker都會以同一種格式進行裝載。

3.2 Linux核心的名稱空間(namespace)

因為一臺伺服器上的所有容器都會共享一個核心,如果容器之間不是獨立的話可能會出現一些問題。比如兩個執行nginx的容器,都需要用到80埠,
這就會發生搶佔,導致服務不可用。

名稱空間可以為以下資源進行獨立分隔:
1.UTS:主機名和域名
2.IPC:訊號量、訊息佇列和共享記憶體
3.PID:程序編號
4.Network:網路裝置、網路棧、埠等
5.Mount:掛載點
6.User:使用者和使用者組

3.3 資源隔離和分組(cgourps)
control group,cgroups可以將cpcu和記憶體之類的硬體資源獨立分配給每個docker容器。

轉載於:https://blog.51cto.com/xiaowangzai/2327310