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容器:
Docker Engine - 新一代虛拟化技術,不需要包含單獨的作業系統。
App - 所有的應用程式現在都作為Docker容器運作。
差別描述:
1.docker有着比虛拟機更少的抽象層。由亍docker不需要Hypervisor實作硬體資源虛拟化,運作在docker容器上的程式直接使用的都是實際實體機的硬體資源。是以在CPU、記憶體使用率上docker将會在效率上有明顯優勢。
2.docker利用的是主控端的核心,而不需要Guest OS。是以,當建立一個容器時,docker不需要和虛拟機一樣重新加載一個作業系統核心。
為了避免引尋、加載作業系統核心返個比較費時費資源的過程,當建立一個虛拟機時,虛拟機軟體需要加載Guest OS,返個建立過程是分鐘級别的。
而docker由于直接利用主控端的作業系統,則省略了返個過程,是以建立一個docker容器隻需要幾秒鐘。
系統化學習docker教程:
https://www.cnblogs.com/newAndHui/p/13508771.html
完美!