在現代軟體開發的世界中,效率和一致性是關鍵。開發人員和運營團隊需要能夠幫助他們無縫管理、部署和運行應用程序的解決方案。
容器和 Docker 是徹底改變了軟體構建、測試和部署方式的技術。
無論你是對科技世界的新手,還是只是想了解 Docker 的基本知識,這篇文章將指導你了解必要的內容。
內容目錄
什麼是容器?
在深入Docker之前,讓我們先了解容器。想象一下,您正在項目上工作,應用程序在您的筆記本電腦上運行完美。但當您試圖在另一台機器上運行同一應用程序時失敗了。這通常是由於環境的差異:不同的操作系統、安裝的軟件版本或配置。
容器通過將應用程序及其所有依賴項(如庫、框架和配置文件)打包成單個標準化單元來解決此問題。這確保應用程序無論部署在哪裡(無論是在您的筆記本電腦、服務器還是在雲端),運行方式都是相同的。
容器的主要特點:
-
輕量級:容器共享主機系統的內核,不像虛擬機器(VM)需要獨立的操作系統實例,這使它們更快速和更高效。
-
可攜式:建立後,容器可以在各種環境中穩定運行。
-
隔離:容器在獨立的進程中運行,這意味著它們不會干擾同一系統上運行的其他應用程式。
什麼是Docker?
現在我們了解了容器,讓我們來談談Docker,這個使容器成為主流的平台。
Docker是一個旨在簡化創建、管理和部署容器過程的開源工具。Docker於2013年推出,由於易於使用、社區支持和強大的工具生態系統,迅速成為容器化的首選解決方案。
Docker中的關鍵概念
-
Docker映像:將Docker映像視為容器的藍圖。它包含運行應用程式所需的一切,包括代碼、庫和系統依賴性。映像是從Dockerfile中撰寫的一組指令構建的。
-
Docker 容器: 容器是 Docker 映像的運行實例。當您創建並啟動一個容器時,Docker 將映像啟動到一個隔離的環境中,您的應用程序可以在其中運行。
-
Dockerfile: 這是一個文本文件,其中包含創建 Docker 映像所需的步驟。它是您定義容器外觀的地方,包括基礎映像、應用程序代碼和任何附加依賴項。
-
Docker Hub: Docker Hub 是一個公共註冊中心,開發者可以在此分享和訪問預構建的映像。如果您正在處理常見的應用程序或技術棧,您很可能會發現 Docker Hub 上已經有可用的映像,這樣可以節省您的時間。
-
Docker Compose:對於需要多個容器的應用程序(例如 Web 伺服器和資料庫),Docker Compose 允許您使用簡單的 YAML 檔案定義和管理多容器環境。
為什麼選擇 Docker?
Docker 的流行源於它解決了開發者今天面臨的各種挑戰:
-
環境一致性:開發者可以「一次構建,到處運行」,確保相同的應用在不同環境(從本地開發到生產)中運行方式相同。
-
速度:Docker 容器啟動和停止速度快,非常適合測試和部署流程。
-
有效利用資源:由於容器更有效地共用主機系統資源比虛擬機器,它們減少了開銷,並允許在部署中實現更高的密度。
-
應用程式版本控制:Docker 允許您對代碼及其運行環境進行版本控制。這在回滾到先前版本或在生產環境中調試問題時特別有用。
Docker 架構
當您首次開始使用 Docker 時,您可能會將其視為一個「只需運行」的盒子。雖然這樣對於入門來說是可以的,但對 Docker 架構的深入了解將幫助您排除故障、優化性能並對容器化策略做出明智的決策。
Docker 的架構旨在確保效率、靈活性和可擴展性。它由幾個組件組成,這些組件共同協作以創建、管理和運行容器。讓我們仔細看看這些組件的每一個。
Docker 架構:關鍵組件
Docker 的架構基於客戶端-伺服器模型,包括以下組件
-
Docker 客戶端
-
Docker 守護進程 (dockerd)
-
Docker 引擎
-
Docker 映像檔
-
Docker 容器
-
Docker 登錄
1. Docker 客戶端
Docker 客戶端是用戶與 Docker 互動的主要方式。它是一個命令行工具,通過 REST API 向 Docker 守護進程發送指令。命令如 docker build
、docker pull
和 docker run
都是從 Docker 客戶端執行的。
當您輸入像 docker run nginx
這樣的命令時,Docker 客戶端將其轉換為 Docker 守護進程可以理解和執行的請求。基本上,Docker 客戶端充當與 Docker 更複雜後端組件互動的前端。
2. Docker 守護進程(dockerd)
Docker 守護進程,也被稱為 dockerd,是整個 Docker 運作的核心。它是一個後台進程,聽取來自 Docker 客戶端的請求並管理 Docker 對象,如容器、映像、網路和卷。
以下是 Docker 守護進程的負責事項
-
構建和運行容器:當客戶端發送運行容器的命令時,守護進程會拉取映像,創建容器並啟動它。
-
管理Docker資源: 守護程序處理像是網絡配置和卷管理等任務。
- Docker守護程序在主機上運行,並使用REST API、Unix套接字或網絡接口與Docker客戶端通信。它還負責與容器運行時進行交互,後者處理容器的實際執行。
3. Docker引擎
Docker引擎是Docker的核心部分。它使整個平台運作,結合了客戶端、守護程序和容器運行時。Docker引擎可以在各種操作系統上運行,包括Linux、Windows和macOS。
有兩個版本的Docker引擎
-
Docker CE(社區版): 這是Docker的免費、開源版本,廣泛用於個人和小型項目。
-
Docker EE(企業版): 付費的企業級版本,附帶增強的安全性、支持和認證等功能。
Docker 引擎通過整合構建、運行和管理容器所需的各種組件,簡化容器編排的複雜性。
4. Docker 映像
Docker 映像是一個只讀模板,包含應用程序運行所需的一切內容——代碼、庫、依賴項和配置。映像是容器的構建塊。當您運行一個容器時,實際上是在 Docker 映像的頂部創建一個可寫層。
Docker 映像通常是從 Dockerfile 構建的,Dockerfile 是包含如何構建映像的指令的文本文件。例如,一個基本的 Dockerfile 可能以像 nginx
或 ubuntu
這樣的基礎映像開始,並包含複製文件、安裝依賴項或設置環境變數的命令。
這是一個 Dockerfile 的簡單示例
dockerfileCopy codeFROM nginx:latest
COPY ./html /usr/share/nginx/html
EXPOSE 80
在這個示例中,我們使用官方 Nginx 映像作為基礎,將本地的 HTML 文件複製到容器的網絡目錄中。
一旦映像構建完成,它可以存儲在 Docker Registry 中並與他人共享。
5. Docker 容器
Docker 容器是 Docker 映像的運行實例。它是輕量級且與其他容器隔離,但與主機操作系統的內核共享。每個容器都有自己的文件系統、內存、CPU 分配和網絡設置,這使得它具有可移植性和可重現性。
容器可以被創建、啟動、停止和銷毀,甚至可以在重啟之間保留。因為容器是基於映像檔的,它們確保應用程式無論在何處運行都會表現相同。
關於Docker容器的幾個關鍵特性:
-
隔離性:容器彼此之間和主機之間是隔離的,但它們仍然共享相同的作業系統核心。
-
可攜性:容器可以在任何地方運行,無論是在本地機器上、虛擬機器上還是雲服務提供商上。
6. Docker註冊表
Docker註冊表是一個集中存儲和分發Docker映像檔的地方。最受歡迎的註冊表是Docker Hub,它托管著數百萬個公開可用的映像檔。組織也可以設立私有註冊表,以安全地存儲和分發自己的映像檔。
Docker註冊表提供了幾個關鍵功能:
-
映像檔版本控制:映像檔使用標籤進行版本控制,輕鬆管理應用程式的不同版本。
-
存取控制: 註冊庫可以是公開或私有的,並透過基於角色的存取控制來管理誰可以拉取或推送映像。
-
分發: 映像可以從註冊庫中拉取並部署到任何地方,方便分享和重用容器化應用程式。
Docker的容器運行時: containerd
Docker架構中一個重要的最新發展是使用containerd。Docker過去有自己的容器運行時,但現在使用containerd,這是一個遵循行業標準的容器運行時,也被Kubernetes等其他平台使用。
-
containerd負責
-
啟動和停止容器
-
管理容器的儲存和網絡
-
從註冊庫拉取容器映像
-
將容器運行時從Docker的高級功能中分離出來,使Docker變得更加模塊化,從而使其他工具可以使用containerd,同時Docker專注於面向用戶的功能。
如何使用Docker創建一個簡單的容器
拉取Linux映像
首先從Docker Hub上拉取alpine
映像。 alpine
映像是一個精簡的Linux發行版,旨在輕量且快速。
運行以下命令:
docker pull alpine
這將下載alpine
映像到您的本地系統。
運行容器
使用alpine
映像創建並啟動一個容器。我們還將在容器內啟動一個終端會話。
docker run -it alpine /bin/sh
這裡是每個選項的含義:
-
docker run
:創建並啟動一個新容器。 -
-it
:允許您與容器交互(交互模式+終端)。 -
alpine
:指定要使用的映像。 -
/bin/sh
:指定在容器內運行的命令(在本例中是一個shell會話)。
探索容器
容器運行後,您將看到類似以下的shell提示符
/ #
這表示您正在使用 Alpine Linux 容器。您現在可以運行 Linux 命令。例如:
檢查當前目錄:
pwd
列出目錄中的文件:
ls
輸出:一個最小的目錄結構,因為 Alpine 是一個輕量級映像。
您還可以安裝一個軟件包(Alpine 使用 apk
作為它的軟件包管理器):
apk add curl
退出容器
當您完成探索時,輸入 exit
來關閉會話並停止容器
bashCopy codeexit
在停止後訪問容器
如果您想在停止後再次訪問容器,可以使用此命令列出所有容器(包括已停止的):
docker ps -a
您將看到一個包含其 ID 和狀態的容器列表,然後您可以啟動已停止的容器:
docker start <container-id>
您可以使用此命令附加到容器的 shell:
docker exec -it <container-id> /bin/sh
如果您不再需要容器,可以將其刪除
-
停止容器(如果它仍在運行):
docker stop <container-id>
-
移除容器:
docker rm <container-id>
重要的Docker指令回顧
指令 | 描述 |
docker pull alpine |
下載Alpine Linux映像檔。 |
docker run -it alpine /bin/sh |
建立並啟動一個互動式容器。 |
docker ps -a |
列出所有容器(正在執行和已停止)。 |
docker start <container-id> |
啟動已停止的容器。 |
docker exec -it <container-id> |
連線到正在執行的容器。 |
docker stop <container-id> |
停止正在執行的容器。 |
docker rm <container-id> |
移除已停止的容器。 |
總結
現在您已獲得基本理解,是時候將您的知識付諸實踐了。開始嘗試Docker,建立您的第一個容器,並探索其龐大的生態系統。
不久之後,您將明白為什麼Docker已成為現代DevOps和軟體工程的基石。
您可以在我的社群平台上跟隨我。
Source:
https://www.freecodecamp.org/news/an-introduction-to-docker-and-containers-for-beginners/