課程內容:
一.基本概念
二.安裝配置
三.常用命令
四.構建鏡像
五.運行容器
六.Docker Compose & Kubernetes
Docker 簡介:
Docker 是一個用於構建(build)、運行(run)、傳送(share) 應用程式的平台。可以將應用程式打包成一個個的貨櫃,然後docker 就可以將這些貨櫃運送到任何需要的地方。有了Docker 我們就可以將作業系統(OS)、作業系統運行時所需要的各種依賴包(depend packages)、第三方軟件庫與配置文件等打包在一起,以便在任何環境中都可以正確地運行。
為何要使用Docker:
比方說,我們建立一個網站,用到了現在比較流行的前後端分離架構。前端使用Vue框架來構建網站的介面,後端使用Java的SpringBoot微服務框架來提供各種服務與接口,然後使用MySQL資料庫來存儲資料。如果沒有Docker,我們需要在本地先安裝前端Node.js環境、各種npm依賴包、Java運行的環境、SpringBoot 微服務的各種第三方依賴包、安裝MySQL資料庫、設定相對應的環境變量與啟動這些服務。網站才能正常運行起來。如果規模再大一點,我們還需要設定Redis緩存、配置nginx負載平衡以及各種微服務框架等等。聽到這些設定,簡直一個頭兩個大。等等,還沒完。如果你需要把這個網站部署到測試環境或開發環境上,那麼剛剛所有步驟都需要在新環境重新再來一次。運氣好的話,可能幾個小時就搞定了。運氣不好,可能需要一整天,甚至更長的時間。而有了Docker,我們就可以將它們打包成一個個的貨櫃,只要在開發環境中運行成功了。那麼在其他環境中,一定也是可以運行成功的。
Docker和虛擬機的區別
在開始學習之前,我們先來了解一下,Docker和傳統的虛擬機之間有什麼區別。Vmware、Virtualbox與Paralels Desktop等虛擬機軟體,與Windows WSL和 Hyper-V功能。我們可以在Windows中通過WSL功能,安奘和使用Linux系統。也可以在Mac上通過虛擬機軟體Paralels Desktop,運行各種Windows 和各種Linux系統。它們是完整的作業系統和實際的Windows和Linux系統一樣。可以在這個操作系統中運行應用軟體。這是通過一種叫做虛擬化(Hypervior)的技術來實現的。虛擬化(Hypervior)是一種將實體資源虛擬為多個邏輯資源的技術。它可以將一台實體服務器虛擬成多個邏輯服務器。每個邏輯服務器都有自己的作業系統、CPU、Memory、HD和網路接口等等。它們之間是完全隔離的,可以獨立運行。虛擬機在一定程度上實現了資源整合,可以將一台服務器的計算能力、存儲能力、網路資源分配給多個邏輯服務器,實現多台服務器的功能。但是它的缺點也非常明顯,每台虛擬機都需要占用大量的資源,比如CPU、Memory、HD、網路等等。而且啟動速度非常慢,通常需要幾分鐘甚至十幾分鐘。而大部分的情況下,其實我們的一台服務器上,只要運行一個主要對外提供服務的應用程序就可以了,並不需要一個完整的作業系統所提供的所有功能。拿剛剛的例子來說,其實我們所需要的,可能只是一個Web服務器。但是虛擬機卻需要啟動一個完整的作業系統。包括作業系統的內核(Kernel)、各種的系統服務、各種工具,甚至是圖形介面等等。這些我們並不需要的服務佔用了大量的資源,導致資源的浪費和啟動速度慢的問題。
了解了虛擬機之後,我們再來看一下容器。這裡注意一下,Docker 和容器是兩個不同的概念。Docker 非常的流行,以至於很多人把Docker和容器混為一談。其實Docker只是容器的一種實現,是容器化的解決方案和平台。而容器是一種虛擬化技術和虛擬機類似,也是一個獨立的環境,可以在這個環境中運行應用程序。和虛擬機不同的是它不需要在容器中,運行一個完整的作業系統。而是使用宿主機(Host)的作業系統,所以啟動速度非常快。通常只需要幾秒鐘。同時因為需要的資源非常少,所以可以在一台實體服務器上運行更多的容器。這樣就可以更加充分地利用服務器的資源,減少資源的閒置和浪費。比如我們一台實體服務器上,可能只能運行幾個虛擬機,但是卻可以運行上百個容器。這就是容器和虛擬機的一些主要區別。
基本原理和概念:
Docker 是如何做到這一塊呢?由於時間的關係,這裡不會介紹Docker原理和體系架構。但是這裡有幾個非常重要的概念,是需要你一定要掌握的。
資料來源: