1. 程式人生 > 實用技巧 >docker系統化學習圖文教程

docker系統化學習圖文教程

1.背景

在實際開發中我們經常遇到這樣的情況:

1.開發的時候測試好的程式已釋出到線上就出問題;

2.線上的叢集環境需要擴容時非常麻煩,比如說要裝jdk、mysql、redis等,如果擴容100臺伺服器,簡直是要崩潰的感覺;

那麼有沒有這樣一個工具,直接把我線下的環境(程式碼+執行環境)直接打包到線上執行,這樣就避免了環境不一樣和安裝環境麻煩的事情,因此docker就挺身而出,來解決這個棘手的問題。

2.簡介

docker官方網站:https://www.docker.com

原始碼:https://github.com/docker/docker-ce

Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從 Apache2.0 協議開源;

Docker讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的Linux機器或Windows 機器上;

Docker也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何介面。

Docker 從 17.03 版本之後分為 CE(Community Edition: 社群版) 和 EE(Enterprise Edition: 企業版),我們用社群版就可以了。

參考文獻百度百科:https://baike.baidu.com/item/docker/13344470

更多的介紹可以參看官方網站

重要理念:一次封裝處處執行,程式即應用

3.docker架構

Docker 使用客戶端-伺服器 (C/S) 架構模式,使用遠端API來管理和建立Docker容器。

Docker 容器通過 Docker 映象來建立。

幾個重要概念:

1.映象:Docker 映象(Image)就是一個只讀的模板。映象可以用來建立 Docker 容器,一個映象可以建立很多容器。

2.容器:容器是獨立執行的一個或一組應用,是映象執行時的實體。

3.倉庫:倉庫可看成一個程式碼控制中心,用來儲存映象,作用類似於之前的maven倉庫。

官方文件的詳細介紹:https://docs.docker.com/get-started/overview/

容器與映象的關係類似於面向物件程式設計中的物件與類。

4.docker安裝

4.1.安裝環境


CentOS Docker 安裝
Docker支援以下的CentOS版本:

CentOS 7 (64-bit),要求系統為64位、系統核心版本為 3.10 以上。
CentOS 6.5 (64-bit) 或更高的版本,要求系統為64位、系統核心版本為 2.6.32-431 或者更高版本。

區別:除了啟動方式有一點點不一樣,其他幾乎都一樣的,不用擔心,可以根據自己的環境選擇一種安裝。

centos6的安裝

https://www.cnblogs.com/newAndHui/p/13508784.html

centos7的安裝

https://www.cnblogs.com/newAndHui/p/13508221.html

4.2.執行hello-world 映象,並理解docker執行原理

執行:docker run hello-world

執行: docker run hello-world 原理

我們再次看到這幅圖,也表示他的重要性,其實原理很簡單,就是典型的“快取思想”:

1.客戶端發出 docker run hello-world 命令

2.服務端收到命令後,檢視本機是否有hello-world這個映象

  2.1.如果有這個映象,就直接例項化為hello-world容器,即映象例項化為容器;

  2.2.如果沒有這個映象,那麼就要去映象倉庫拉取hello-world映象,然後在執行2.1.的步驟

  2.3.如果拉取這映象失敗,映象倉庫沒有這個映象,那麼就要報錯。

大家可以結合著這幅圖理解:

先理解什麼是:docker 客戶端,docker 服務端,映象倉庫

在理解什麼是:映象,容器

最後理解:這些關係

docker的工作原理

1.Docker是一個Client-Server結構的系統;

2.Docker守護程序(daemon)執行在主機上, 然後通過Socket連線從客戶端訪問;

3.守護程序從客戶端接受命令並管理(對容器進行CRUD)執行在主機上的容器。

面試題:

docker與虛擬機器的區別

vm虛擬機器:

server - 表示真實電腦。
Host OS - 真實電腦的作業系統,例如:Windows,Linux
Hypervisor - 虛擬機器平臺,模擬硬體,如VMWare,VirtualBox
Guest OS - 虛擬機器平臺上安裝的作業系統,例如CentOS Linux
App - 虛擬機器作業系統上的應用,例如nginx

docker容器:

server - 表示真實電腦。
Host OS - 真實電腦的作業系統,例如:Windows,Linux
Docker Engine - 新一代虛擬化技術,不需要包含單獨的作業系統。
App - 所有的應用程式現在都作為Docker容器執行。

區別描述:

1.docker有著比虛擬機器更少的抽象層。由亍docker不需要Hypervisor實現硬體資源虛擬化,執行在docker容器上的程式直接使用的都是實際物理機的硬體資源。因此在CPU、記憶體利用率上docker將會在效率上有明顯優勢。

2.docker利用的是宿主機的核心,而不需要Guest OS。因此,當新建一個容器時,docker不需要和虛擬機器一樣重新載入一個作業系統核心。

為了避免引尋、載入作業系統核心返個比較費時費資源的過程,當新建一個虛擬機器時,虛擬機器軟體需要載入Guest OS,返個新建過程是分鐘級別的。

而docker由於直接利用宿主機的作業系統,則省略了返個過程,因此新建一個docker容器只需要幾秒鐘。

完美!