全面的Docker快速入門教程
前言:
都2021年了,你還在為了安裝一個開發或者部署環境、軟體而花費半天的時間嗎?你還在解決開發環境能夠正常訪問,而發布測試環境無法正常訪問的問題嗎?你還在為持續集成和持續交付(CI / CD)工作流程苦惱嗎?那還在猶豫是什麼,Docker能夠完美的解決你遇到這所有的問題。
Docker是什麼?
Docker 是一個開源的應用容器引擎,基於 Golang 語言開發,可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發布到任何流行的 Linux 伺服器。容器是一個沙箱機制,相互之間不會有影響(類似於我們手機上運行的 app),並且容器開銷是很低的。
Docker 是一個供開發人員和系統管理員構建、運行和與容器共享應用程式的平台。使用容器部署應用程式稱為容器化。容器並不是新事物,但它們用於輕鬆部署應用程式卻是新鮮的。
注意:Docker並非是一個通用的容器工具,它依賴於已存在並運行的Linux內核環境。
Docker的優勢有哪些?
- 靈活性:即使是最複雜的應用程式也可以容器化。
- 輕量級:容器利用並共享主機內核,使它們在系統資源方面比虛擬機更有效率。
- 可移植:您可以在本地構建,部署到雲上,並在任何地方運行。
- 松耦合:容器是高度自給自足和封裝的,允許您在不影響其他容器的情況下替換或升級其中一個。
- 可擴展:您可以跨數據中心增加和自動分發容器副本。
- 安全性:容器對進程應用主動約束和隔離,而不需要用戶進行任何配置。
Docker的作用?
Docker 是一個用於開發、傳送和運行應用程式的開放平台。Docker 使您能夠將應用程式與基礎設施分開,以便您可以快速交付軟體。使用 Docker,您可以像管理應用程式一樣管理基礎設施。通過利用 Docker 的快速交付、測試和部署程式碼的方法,您可以顯著減少編寫程式碼和在生產中運行程式碼之間的延遲。Docker(opens new window)是個劃時代的開源項目,它徹底釋放了計算虛擬化的威力,極大提高了應用的維護效率,降低了雲計算應用開發的成本!使用 Docker,可以讓應用的部署、測試和分發都變得前所未有的高效和輕鬆!無論是應用開發者、運維人員、還是其他資訊技術從業人員,都有必要認識和掌握 Docker,節約有限的生命。
Docker主要用來解決什麼問題?
Docker的出現主要就是為了解決:在我的機器上運行時正常的為什麼到你的機器上就運行不正常了。
比如你寫一個Web應用,並且本地調試沒有任何問題。這時候你想發給你的朋友試試看或者發布部署到遠程的雲伺服器上查看效果,那麼首先你需要配置和你本地相同的軟體環境,如資料庫,Web伺服器(IIS,Tomcat,Nginx),必要的插件,庫等等。而這你還不能保證的你的軟體一定能夠運行起來,因為別人可能用完全不同的作業系統,即便是使用Linux每種發行版也會有微小的區別。
為了模擬完全相同的本地開發環境。
我們首先想到的就是虛擬機,但是虛擬機需要模擬硬體,運行整個作業系統不但體積臃腫記憶體佔用高,程式的性能也會受到影響。
如下圖是比較常用的虛擬機:
Docker的脫穎而出:
這時候Dokcer就派上了用場,Docker在概念上與虛擬機非常類似。但是Docker更輕量,它不會去模擬底層的硬體 ,只會為每一個應用提供完全隔離的運行環境。你可以在容器中配置不同的應用環境,並且不用的環境之間互相不影響,這個「環境」在Docker中也被稱作為Container(容器)。
Docker和虛擬機技術的區別?
Docker 在容器的基礎上,進行了進一步的封裝,從文件系統、網路互聯到進程隔離等等,極大的簡化了容器的創建和維護。使得 Docker
技術比虛擬機技術更為輕便、快捷。
下面的圖片比較了 Docker 和傳統虛擬化方式的不同之處。傳統虛擬機技術是虛擬出一套硬體後,在其上運行一個完整作業系統,在該系統上再運行所需應用進程;而容器內的應用進程直接運行於宿主的內核,容器內沒有自己的內核,而且也沒有進行硬體虛擬。因此容器要比傳統虛擬機更為輕便。
如果想詳細了解,可以參考文章:docker與虛擬機的區別👉
Docker容器和虛擬機的區別總結:
特性 |
docker容器 |
虛擬機 |
啟動 |
秒級 |
分鐘級 |
硬碟使用 |
一般為MB |
一般為GB |
性能 |
接近原生(宿主機) |
弱於原生 |
系統支援量 |
單機支援上千個容器 |
一般幾十個 |
Docker中的三個重要概念
Docker中的三個重要概念分別是:Image(鏡像),Container(容器),Repository(倉儲)。
Image(鏡像)一個特殊的文件系統
你可以把它理解成一個虛擬機的快照(Snapshot),裡面包含了你要部署的應用程式以及它所關聯的所有庫。
作業系統分為內核和用戶空間。對於Linux而言,內核啟動後,會掛載root文件系統為其提供用戶空間支援。而Docker鏡像(Image),就相當於是一個root文件系統。Docker鏡像是一個特殊的文件系統,除了提供容器運行時所需的程式、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變數、用戶等)。 鏡像不包含任何動態數據,其內容在構建之後也不會被改變。
Container(容器)鏡像運行時的實體
這裡的容器就像是一台台運行起來的虛擬機,裡面運行了你的應用程式,每個容器是獨立運行的他們相互之間不影響。通過一個鏡像,我們可以創建許多個不同的Container容器。
鏡像(Image)和容器(Container)的關係,就像是面向對象程式設計中的類和類的實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等 。容器的實質是進程,但與直接在宿主執行的進程不同,容器進程運行於屬於自己的獨立的命名空間。前面講過鏡像使用的是分層存儲,容器也是如此。容器存儲層的生存周期和容器一樣,容器消亡時,容器存儲層也隨之消亡。因此,任何保存於容器存儲層的資訊都會隨容器刪除而丟失。
Repository(倉儲)集中存放鏡像文件的地方
鏡像構建完成後,可以很容易的在當前宿主上運行,但是, 如果需要在其它伺服器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務(就像Git倉庫一樣),Docker Registry就是這樣的服務。
一個Docker Registry中可以包含多個倉庫(Repository),每個倉庫可以包含多個標籤(Tag),每個標籤對應一個鏡像。所以說:鏡像倉庫是Docker用來集中存放鏡像文件的地方類似於我們之前常用的程式碼倉庫。通常,一個倉庫會包含同一個軟體不同版本的鏡像,而標籤就常用於對應該軟體的各個版本 。我們可以通過<倉庫名>:<標籤>的格式來指定具體是這個軟體哪個版本的鏡像。如果不給出標籤,將以latest作為默認標籤。
Docker 架構及工作原理
Docker使用客戶端-伺服器架構。Docker 客戶端與 Docker 守護進程通訊,後者負責構建、運行和分發Docker容器等繁重的工作。Docker 客戶端和守護進程可以運行在同一個系統上,或者您可以將一個 Docker 客戶端連接到一個遠程 Docker 守護進程。Docker 客戶端和守護進程通過 UNIX 套接字或網路介面使用 REST API 進行通訊。
Dockerfile(自動化腳本)
主要是用來創建我們之間講到的鏡像,這個過程就好比我們在虛擬機中安裝作業系統和軟體一樣,只不過是通過Dockerfile這個自動化腳本完成的。
Dockerfile詳解教程文章:Dockerfile製作自己的鏡像文件👉
Docker管理工具
Portainer(推薦)
介紹:Portainer是一個開源的、輕量級的Docker環境管理UI(是Web應用的形式),可以用來管理Docker宿主機和docker swarm集群。
Github 上項目地址://github.com/portainer/portainer
官網地址://www.portainer.io
支援的系統:Linux, Mac OS X, Windows。
功能特性:
- 管理倉庫、網路、數據卷、密鑰、鏡像、容器
- 管理你的配置,例如告警、監控
- 支援容器的健康檢查
- 容器的啟動、停止、恢復、刪除
- 檢查容器、查看容器日誌、可視化狀態查看
- 進入容器控制台
- 可以添加擴展
- 有一套 RBAC 基於角色的許可權控制系統
DockStation
介紹:DockStation 是免費的,是桌面應用的形式。
官網地址://dockstation.io/
Github地址://github.com/DockStation/dockstation
支援的系統:Linux, Mac, Windows
功能特性:
- 可以非常方便的操作 Docker 和 DockerCompose。
- 可以幫助我們管理容器、Service服務(本地遠程都可以),並監控他們
- 可以輕鬆跟蹤 CPU、記憶體、網路、磁碟I/O、開放埠
- 可以把常用的操作組織成一個項目,通過項目的方式來檢查容器狀態,以圖形化的方式管理。
Docker Desktop
介紹:Docker Desktop 是一款易於安裝的應用程式,使您能夠構建和共享容器化應用程式和微服務。
官網地址://www.docker.com/products/docker-desktop
支援的系統:Mac, Windows
功能特性:
- 能夠以多種語言和框架在任何雲平台上容器化和共享任何應用程式
- 輕鬆安裝和設置完整的 Docker 開發環境
- 包括最新版本的 Kubernetes
- 自動更新,讓您保持最新狀態和安全
- 在 Windows 上,能夠在 Linux 和 Windows Server 環境之間切換以構建應用程式
- 使用本機 Windows Hyper-V 虛擬化實現快速可靠的性能
- 能夠通過 Windows 機器上的 WSL 2 在 Linux 上本地工作
- 程式碼和數據的卷安裝,包括文件更改通知和輕鬆訪問本地主機網路上運行的容器
- 使用支援的 IDE 進行容器內開發和調試