什麼是Docker:完整指南

什麼是Docker:完整指南

開發應用程式通常涉及管理複雜的資料庫、程式語言、框架、依賴關係等。此外,在與不同的作業系統(OSs)合作時,你可能會面臨相容性問題。這些變數中的每一個都會對你的工作流程產生負面影響。

為了解決這些問題,你可以開始使用Docker。這個工具使你能夠在容器化環境中構建和管理應用程式。最終,Docker可以消除許多複雜的配置任務,使開發更容易、更有效率。

在這篇文章中,我們將回答 “什麼是Docker?”這個問題,並解釋它是如何工作的。然後,我們將向你展示它的一些主要用例,以及作為一個初學者如何開始使用。

  1. 什麼是Docker?
  2. Docker與虛擬機器
  3. Docker是如何工作的?
  4. Docker的用途是什麼?
  5. 使用Docker的優點和缺點
  6. 如何開始使用Docker

什麼是Docker?

那麼,Docker究竟是什麼?它是一個在沙盒中開發應用程式的開源平臺。它的輕量級虛擬化環境也被稱為容器:

Docker官網

Docker

雖然容器早在1979年就已經存在,但Docker讓它們變得更加容易使用。使用Docker,開發人員可以在本地或生產伺服器上構建、測試和部署他們的應用程式。

自2014年Docker 1.0釋出以來,它已經為個人開發者和公司規範了容器的使用。現在,它有超過1300萬使用者,包括Netflix、Target和Adobe等大公司:

使用Docker的企業

使用Docker的企業

另外,Docker的採用率正在逐年增加。根據Datadog的資料,近25%的公司已經開始使用Docker來監控其應用程式。自2015年以來,這一比例每年都在增長3到5個百分點:

越來越多的公司使用Docker

越來越多的公司使用Docker(來源:Datadog)。

我們可以看到,Docker已經成為開發和部署應用程式的流行平臺。為了進一步瞭解它的受歡迎程度,讓我們深入瞭解Docker軟體的工作原理。

Docker與虛擬機器

在Docker中,你可以將一個應用程式打包成一個標準化的單元,可用於軟體開發。這個單元,或稱容器,包括應用程式的編碼和依賴性,這樣它就可以輕鬆地在任何計算環境中執行。

在Docker之前,公司經常使用虛擬機器(VM)來執行應用程式。這些可以模擬物理計算機,使開發人員能夠將一臺伺服器變成多臺伺服器。然而,這種方法會有一些缺點。

每個虛擬機器包含作業系統和應用程式的完整副本,以及必要的二進位制檔案和庫。這些檔案可能會在一臺電腦上佔用幾十GB的空間。此外,為客戶作業系統虛擬化硬體可能需要大量的開銷。

容器代替了對硬體的虛擬化,對作業系統進行了虛擬化。在Docker中,容器是應用層的抽象,可以包含程式碼和依賴關係。在同一臺機器上,多個容器可以作為孤立的程序執行:

Docker和虛擬機器的比較

Docker和虛擬機器的比較(來源:ResearchGate)。

因此,Docker容器通常佔用的空間較小。它們還可以包含更多的應用程式,而不需要那麼多的虛擬機器和作業系統。

Docker是如何工作的?

想象一下,你正試圖將貨物從一個地方運到另一個地方。在現代,你可以用集裝箱輕鬆做到這一點。這些將把某些物品放在一起的密封環境中,使它們能夠通過船舶、火車或飛機進行運輸。

Docker的工作方式非常類似。簡單地說,Docker規範了開發和部署軟體的方法。

Docker用容器工作。這些容器可以有可重複使用的元件,如Python、Node、依賴性等等。然後,你可以將容器部署在任何地方,而不必擔心相容性問題。

Docker一開始可能很複雜,所以讓我們討論一下這個軟體中涉及的所有主要元件。一旦你瞭解了這些主要功能,你就可以簡化你的應用程式的開發過程了!

Docker引擎

Docker Engine是用於在Docker中構建和容器化應用程式的客戶-伺服器技術。從本質上講,它支援執行你的基於容器的應用程式所涉及的所有任務:

Docker引擎示意圖

Docker引擎示意圖(來源:Docker

這些是Docker引擎中的主要元件:

  • Docker Daemon:管理Docker映象、容器、網路和卷。它還監聽Docker API請求並處理它們。
  • Docker Engine REST API:由Docker開發的API,與守護程式進行互動。
  • Docker CLI:用於與Docker守護程序通訊的命令列介面。

通過Docker引擎,你可以在任何基礎設施上執行容器化的應用程式。這種設定有助於實現Docker的行業領先的容器執行時間

Docker映象

Docker映象是一個可執行的軟體包,包括執行一個應用程式所需的所有原始碼、依賴性和工具。映象是隻讀模板,為建立容器提供指示。

你可以把Docker映象想象成藍圖,從而更好地理解它們。它們包含了一個容器執行時將包括的快照。

在一個映象中,有多個堆疊層。例如,如果你想建立一個網路伺服器映象,你可以首先包括Ubuntu Linux。接下來,你可以在上面疊加Apache和PHP的編碼。

在製作Docker映象時,最好把最易變的層放在堆疊的高處。然後,如果你需要做一個改變,你就不需要重建整個映象了。

Docker容器

正如我們前面所討論的,容器是Docker的重要組成部分。簡單地說,Docker容器是一個孤立的區域,供應用程式執行而不影響系統的其他部分。這個軟體單元將打包所有的程式碼和依賴關係,以便於從一個應用程式轉移到下一個。

以下是使用Docker容器的一些好處:

  • 標準:雖然容器已經存在了幾十年,但Docker已經為其使用創造了行業標準。Docker容器具有難以置信的可移植性和易用性。
  • 輕量級:由於容器共享作業系統的核心,你不需要為每個應用程式提供不同的作業系統。因此,你的應用程式可以更有效地執行,並減少伺服器和許可成本。
  • 安全:與虛擬機器不同,容器隔離了應用程式,這使它們更加安全。有了Docker,你的容器將有預設的隔離能力。

最終,Docker容器提供了比虛擬機器更多的優勢。儘管它們以類似的方式隔離和分配資源,但容器通常更可移植、更高效、更安全。

Docker Compose

Docker Compose是一個工具,旨在將多個容器作為一個單一服務來執行。如果你的應用同時需要NGINXMySQL,Docker Compose可以讓你建立一個檔案來啟動兩個容器。這就避免了分別啟動每個容器的需要。

以下是使用Docker Compose時的三個基本步驟:

  1. 建立一個Docker檔案來定義應用程式的環境,以便它可以被複制。
  2. docker-compose.yml檔案中定義你的應用程式的每個服務,以便它們可以在一個隔離的環境中執行。
  3. 使用Docker Compose命令來啟動和執行你的應用程式。

從本質上講,Docker Compose使多個容器在隔離的情況下執行。然而,在必要的時候,它們可以彼此互動。

例如,Compose可以幫助你建立和配置你的應用程式的服務依賴,如資料庫、快取或Web服務API

Dockerfile

Dockerfile是一個文字檔案,包括構建Docker映象的說明。通過閱讀這個檔案,Docker會自動構建新的映象。

docker build 命令將從Dockerfile和一個上下文中建立一個映象。這個上下文是一組檔案,位於指定的路徑或URL中。

首先,輸入以下命令:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker build
docker build
docker build

這將把整個上下文傳送給Docker守護程序。要指向檔案系統中的一個Docker檔案,請使用這個命令:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker build -f /path/to/a/Dockerfile
docker build -f /path/to/a/Dockerfile
docker build -f /path/to/a/Dockerfile

如果構建成功,你可以指定一個你想儲存新映象的儲存庫和標籤:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker build -t shykes/myapp
docker build -t shykes/myapp
docker build -t shykes/myapp

然後,Docker守護程序將對Dockerfile進行驗證。如果語法上有問題,它將返回一個錯誤。

Docker桌面

要在你的Mac、Linux或Windows環境中開始使用Docker,你可以安裝Docker Desktop。它提供了一個簡單、易於使用的介面,用於管理個人電腦上的容器、應用程式和影象:

Docker桌面

Docker桌面

有了Docker Desktop,你就不必使用命令列來執行基本任務了。這可以加速開發工作流程

Docker桌面儀表盤

Docker桌面儀表盤

它還配備了一個內建的擴充套件市場,使得開始使用第三方開發者工具變得容易。這些工具包括用於除錯、測試和保護你的應用程式的軟體

Docker桌面擴充套件市場

Docker桌面擴充套件市場

另外,Docker Desktop對個人和小型企業使用是免費的。然而,請記住,較大的公司需要購買訂閱,起價為每月5美元。

Docker Hub

Docker Hub是一個可以找到和分享容器映象的平臺。它是全球最大的容器映象庫,擁有來自社羣開發者、開源專案和獨立軟體供應商(ISV)的資源:

Docker Hub映象

Docker Hub映象

以下是Docker Hub中包含的一些功能:

  • 用於推送和拉動容器映象的儲存庫
  • 建立可以訪問私人儲存庫的團隊和組織
  • Docker官方映象
  • Docker驗證的釋出者映象
  • GitHub或Bitbucket建立容器映象並推送到Docker Hub
  • 用webhooks觸發行動

要開始使用Docker Hub,你需要建立你的第一個資源庫。你只需要給它起個名字並指定它的可見性:

建立一個Docker Hub資源庫

建立一個Docker Hub資源庫

然後,你可以下載Docker Desktop,開始從Docker Hub拉取和推送容器映象。你會在新倉庫的最新標籤下看到這些推送。

Docker的用途是什麼?

Docker主要是為DevOps和開發人員設計的。這個工具使開發人員能夠建立、定製和部署應用程式,作為可移植的輕量級容器。這種設定將其所有的依賴性打包成一個單元,可以在幾乎任何作業系統上執行。

下面是Docker的一個典型用例:

  1. 開發人員在本地編寫程式碼,然後使用Docker容器與他們的團隊分享。
  2. 他們將應用程式推送到測試環境,在那裡很容易進行自動和手動測試。
  3. 當發現bug時,開發人員在開發環境中對其進行故障排除。為了測試這些變化,他們在測試環境中重新部署它們。
  4. 在開發人員修復錯誤後,更新的影象被推送到生產環境。

使用這個工作流程,你可以測試新的軟體,而不用進行手動安裝。例如,你可能會發現設定一個MySQL伺服器是很困難和繁瑣的。相反,你可以使用Docker CLI來執行這項任務,只需一條命令。

由於Docker有自己的CLI,初學者可以用它來學習如何操作命令列。在Linux環境中設定好Docker後,你可以開始使用Linux命令。然後,你可以更快、更有效地執行系統管理任務。

使用Docker的優點和缺點

現在你已經瞭解了Docker的核心元件,讓我們來討論它的主要優點和缺點。然後你可以決定它是否對管理你的軟體應用程式有用。

優點

作為一個開發者,你的一些工作在手動執行時可能變得乏味和重複。通過Docker容器,你可以安排這些任務的自動化。使用cron作業可以大大減少你的工作量,優化你的時間。

此外,Docker是高度可移植的。它使你的開發團隊的每個成員都能在應用程式上工作,甚至在不同的伺服器、機器或作業系統上。這種設定可以消除許多因平臺不相容而產生的問題。

與虛擬機器相比,Docker容器可以節省更多空間。雖然Docker和虛擬機器的工作原理相似,但Docker要輕得多。

此外,Docker有一個強大的社羣。通過加入Docker社羣活動,你可以與其他Docker使用者進行面對面和線上交流:

Docker社羣

Docker社羣

你還可以瀏覽Docker的廣泛的社羣論壇。如果你是一個初學者,這些討論可以幫助你獲得使用這個平臺的建議。

缺點

正如我們前面提到的,Docker可能比虛擬機器更有效。然而,在物理伺服器上執行應用程式通常要快得多。

Docker也可能涉及到一個陡峭的學習曲線。它不是為執行具有圖形使用者介面(GUI)的應用程式而設計的。這意味著你需要學習命令列,這對初學者來說可能是個挑戰。

最後,Docker容器將在主機的作業系統上執行。如果這些容器中隱藏有任何惡意軟體,主機可能會受到影響。

如何開始使用Docker

開始使用Docker,你必須訪問主網站。然後,為你的電腦作業系統下載相容的版本。

如果你有一臺Mac電腦,你將需要選擇英特爾晶片或蘋果晶片的Docker版本。也有針對Windows和Linux使用者的選項。

一旦你開啟下載的檔案,它將在你的電腦上安裝Docker Desktop。接下來,開啟Docker Hub並建立一個新賬戶:

在Docker上建立一個賬戶

在Docker上建立一個賬戶

現在你可以開啟Docker桌面並登入。然後,開啟你的命令列或bash視窗,執行這個命令:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker run -d -p 80:80 docker/getting-started
docker run -d -p 80:80 docker/getting-started
docker run -d -p 80:80 docker/getting-started

一旦你這樣做,你會在你的Docker Desktop儀表板上看到一個新的容器。它的名字將是為你的賬戶隨機生成的:

新的Docker容器

新的Docker容器

你也會有一個新的Docker映象。如果你導航到Images標籤,你會看到一個docker/getting-started影象正在使用中:

新的Docker映象

新的Docker映象

現在你已經擁有了開始管理你的本地容器所需要的一切!

小結

如果你必須管理多個應用程式,Docker可以成為獨立組織它們的有效工具。由於它使用容器,Docker可以幫助你開發每個應用程式,而沒有程式語言、庫或框架衝突的風險。

儘管Docker通常比虛擬機器(VM)更有效,但在物理伺服器上工作會更快。由於它還依賴於一個命令列介面,Docker可能也不是絕對的初學者的一個好選擇。

評論留言