開發應用程式通常涉及管理複雜的資料庫、程式語言、框架、依賴關係等。此外,在與不同的作業系統(OSs)合作時,你可能會面臨相容性問題。這些變數中的每一個都會對你的工作流程產生負面影響。
為了解決這些問題,你可以開始使用Docker。這個工具使你能夠在容器化環境中構建和管理應用程式。最終,Docker可以消除許多複雜的配置任務,使開發更容易、更有效率。
在這篇文章中,我們將回答 “什麼是Docker?”這個問題,並解釋它是如何工作的。然後,我們將向你展示它的一些主要用例,以及作為一個初學者如何開始使用。
什麼是Docker?
那麼,Docker究竟是什麼?它是一個在沙盒中開發應用程式的開源平臺。它的輕量級虛擬化環境也被稱為容器:
Docker
雖然容器早在1979年就已經存在,但Docker讓它們變得更加容易使用。使用Docker,開發人員可以在本地或生產伺服器上構建、測試和部署他們的應用程式。
自2014年Docker 1.0釋出以來,它已經為個人開發者和公司規範了容器的使用。現在,它有超過1300萬使用者,包括Netflix、Target和Adobe等大公司:
使用Docker的企業
另外,Docker的採用率正在逐年增加。根據Datadog的資料,近25%的公司已經開始使用Docker來監控其應用程式。自2015年以來,這一比例每年都在增長3到5個百分點:
越來越多的公司使用Docker(來源:Datadog)。
我們可以看到,Docker已經成為開發和部署應用程式的流行平臺。為了進一步瞭解它的受歡迎程度,讓我們深入瞭解Docker軟體的工作原理。
Docker與虛擬機器
在Docker中,你可以將一個應用程式打包成一個標準化的單元,可用於軟體開發。這個單元,或稱容器,包括應用程式的編碼和依賴性,這樣它就可以輕鬆地在任何計算環境中執行。
在Docker之前,公司經常使用虛擬機器(VM)來執行應用程式。這些可以模擬物理計算機,使開發人員能夠將一臺伺服器變成多臺伺服器。然而,這種方法會有一些缺點。
每個虛擬機器包含作業系統和應用程式的完整副本,以及必要的二進位制檔案和庫。這些檔案可能會在一臺電腦上佔用幾十GB的空間。此外,為客戶作業系統虛擬化硬體可能需要大量的開銷。
容器代替了對硬體的虛擬化,對作業系統進行了虛擬化。在Docker中,容器是應用層的抽象,可以包含程式碼和依賴關係。在同一臺機器上,多個容器可以作為孤立的程序執行:
Docker和虛擬機器的比較(來源:ResearchGate)。
因此,Docker容器通常佔用的空間較小。它們還可以包含更多的應用程式,而不需要那麼多的虛擬機器和作業系統。
Docker是如何工作的?
想象一下,你正試圖將貨物從一個地方運到另一個地方。在現代,你可以用集裝箱輕鬆做到這一點。這些將把某些物品放在一起的密封環境中,使它們能夠通過船舶、火車或飛機進行運輸。
Docker的工作方式非常類似。簡單地說,Docker規範了開發和部署軟體的方法。
Docker用容器工作。這些容器可以有可重複使用的元件,如Python、Node、依賴性等等。然後,你可以將容器部署在任何地方,而不必擔心相容性問題。
Docker一開始可能很複雜,所以讓我們討論一下這個軟體中涉及的所有主要元件。一旦你瞭解了這些主要功能,你就可以簡化你的應用程式的開發過程了!
Docker引擎
Docker Engine是用於在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是一個工具,旨在將多個容器作為一個單一服務來執行。如果你的應用同時需要NGINX和MySQL,Docker Compose可以讓你建立一個檔案來啟動兩個容器。這就避免了分別啟動每個容器的需要。
以下是使用Docker Compose時的三個基本步驟:
- 建立一個Docker檔案來定義應用程式的環境,以便它可以被複制。
- 在docker-compose.yml檔案中定義你的應用程式的每個服務,以便它們可以在一個隔離的環境中執行。
- 使用Docker Compose命令來啟動和執行你的應用程式。
從本質上講,Docker Compose使多個容器在隔離的情況下執行。然而,在必要的時候,它們可以彼此互動。
例如,Compose可以幫助你建立和配置你的應用程式的服務依賴,如資料庫、快取或Web服務API。
Dockerfile
Dockerfile是一個文字檔案,包括構建Docker映象的說明。通過閱讀這個檔案,Docker會自動構建新的映象。
docker build
命令將從Dockerfile和一個上下文中建立一個映象。這個上下文是一組檔案,位於指定的路徑或URL中。
首先,輸入以下命令:
docker build
這將把整個上下文傳送給Docker守護程序。要指向檔案系統中的一個Docker檔案,請使用這個命令:
docker build -f /path/to/a/Dockerfile
如果構建成功,你可以指定一個你想儲存新映象的儲存庫和標籤:
docker build -t shykes/myapp
然後,Docker守護程序將對Dockerfile進行驗證。如果語法上有問題,它將返回一個錯誤。
Docker桌面
要在你的Mac、Linux或Windows環境中開始使用Docker,你可以安裝Docker Desktop。它提供了一個簡單、易於使用的介面,用於管理個人電腦上的容器、應用程式和影象:
Docker桌面
有了Docker Desktop,你就不必使用命令列來執行基本任務了。這可以加速開發工作流程:
Docker桌面儀表盤
它還配備了一個內建的擴充套件市場,使得開始使用第三方開發者工具變得容易。這些工具包括用於除錯、測試和保護你的應用程式的軟體:
Docker桌面擴充套件市場
另外,Docker Desktop對個人和小型企業使用是免費的。然而,請記住,較大的公司需要購買訂閱,起價為每月5美元。
Docker Hub
Docker Hub是一個可以找到和分享容器映象的平臺。它是全球最大的容器映象庫,擁有來自社羣開發者、開源專案和獨立軟體供應商(ISV)的資源:
Docker Hub映象
以下是Docker Hub中包含的一些功能:
- 用於推送和拉動容器映象的儲存庫
- 建立可以訪問私人儲存庫的團隊和組織
- Docker官方映象
- Docker驗證的釋出者映象
- 從GitHub或Bitbucket建立容器映象並推送到Docker Hub
- 用webhooks觸發行動
要開始使用Docker Hub,你需要建立你的第一個資源庫。你只需要給它起個名字並指定它的可見性:
建立一個Docker Hub資源庫
然後,你可以下載Docker Desktop,開始從Docker Hub拉取和推送容器映象。你會在新倉庫的最新標籤下看到這些推送。
Docker的用途是什麼?
Docker主要是為DevOps和開發人員設計的。這個工具使開發人員能夠建立、定製和部署應用程式,作為可移植的輕量級容器。這種設定將其所有的依賴性打包成一個單元,可以在幾乎任何作業系統上執行。
下面是Docker的一個典型用例:
- 開發人員在本地編寫程式碼,然後使用Docker容器與他們的團隊分享。
- 他們將應用程式推送到測試環境,在那裡很容易進行自動和手動測試。
- 當發現bug時,開發人員在開發環境中對其進行故障排除。為了測試這些變化,他們在測試環境中重新部署它們。
- 在開發人員修復錯誤後,更新的影象被推送到生產環境。
使用這個工作流程,你可以測試新的軟體,而不用進行手動安裝。例如,你可能會發現設定一個MySQL伺服器是很困難和繁瑣的。相反,你可以使用Docker CLI來執行這項任務,只需一條命令。
由於Docker有自己的CLI,初學者可以用它來學習如何操作命令列。在Linux環境中設定好Docker後,你可以開始使用Linux命令。然後,你可以更快、更有效地執行系統管理任務。
使用Docker的優點和缺點
現在你已經瞭解了Docker的核心元件,讓我們來討論它的主要優點和缺點。然後你可以決定它是否對管理你的軟體應用程式有用。
優點
作為一個開發者,你的一些工作在手動執行時可能變得乏味和重複。通過Docker容器,你可以安排這些任務的自動化。使用cron作業可以大大減少你的工作量,優化你的時間。
此外,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桌面並登入。然後,開啟你的命令列或bash視窗,執行這個命令:
docker run -d -p 80:80 docker/getting-started
一旦你這樣做,你會在你的Docker Desktop儀表板上看到一個新的容器。它的名字將是為你的賬戶隨機生成的:
新的Docker容器
你也會有一個新的Docker映象。如果你導航到Images標籤,你會看到一個docker/getting-started影象正在使用中:
新的Docker映象
現在你已經擁有了開始管理你的本地容器所需要的一切!
小結
如果你必須管理多個應用程式,Docker可以成為獨立組織它們的有效工具。由於它使用容器,Docker可以幫助你開發每個應用程式,而沒有程式語言、庫或框架衝突的風險。
儘管Docker通常比虛擬機器(VM)更有效,但在物理伺服器上工作會更快。由於它還依賴於一個命令列介面,Docker可能也不是絕對的初學者的一個好選擇。
評論留言