
- Docker 教程
- Docker - 首頁
- Docker - 概述
- Docker - 在 Linux 上安裝
- Docker - 安裝
- Docker - Hub
- Docker - 映象
- Docker - 容器
- Docker - 註冊中心
- Docker - Compose
- Docker - 使用容器
- Docker - 架構
- Docker - 層
- Docker - 容器與主機
- Docker - 配置
- Docker - 容器與 Shell
- Docker - Dockerfile
- Docker - 構建檔案
- Docker - 公共倉庫
- Docker - 管理埠
- Docker - Web 伺服器
- Docker - 命令
- Docker - 容器連結
- Docker - 資料儲存
- Docker - 卷
- Docker - 網路
- Docker - 安全
- Docker - 工具箱
- Docker - 雲
- Docker - 構建雲
- Docker - 日誌
- Docker - 持續整合
- Docker - Kubernetes 架構
- Docker - Kubernetes 的工作原理
- Docker - 生成式 AI
- Docker - 託管
- Docker - 最佳實踐
- Docker 設定服務
- Docker - 設定 Node.js
- Docker - 設定 MongoDB
- Docker - 設定 NGINX
- Docker - 設定 ASP.Net
- Docker - 設定 MySQL
- Docker - 設定 Go
- Docker - 設定 Rust
- Docker - 設定 Apache
- Docker - 設定 MariaDB
- Docker - 設定 Jupyter
- Docker - 設定 Portainer
- Docker - 設定 Rstudio
- Docker - 設定 Plex
- Docker 設定 - Flame
- Docker 設定 - PostgreSQL
- Docker 設定 - Mosquitto
- Docker 設定 - Grafana
- Docker 設定 - Nextcloud
- Docker 設定 - Pawns
- Docker 設定 - Ubuntu
- Docker 設定 - RabbitMQ
- Docker - 設定 Python
- Docker - 設定 Java
- Docker - 設定 Redis
- Docker - 設定 Alpine
- Docker - 設定 BusyBox
- Docker 設定 - Traefik
- Docker 設定 - WordPress
- Docker 有用資源
- Docker - 快速指南
- Docker - 有用資源
- Docker - 討論
Docker - 概述
目前,Docker 佔據容器化技術市場超過 32% 的市場份額,並且這一數字預計還會增長。一般來說,任何容器化軟體都允許您在不啟動整個虛擬機器的情況下執行。
Docker 使重複且耗時的配置任務變得多餘。這允許在桌面和雲環境中快速有效地開發應用程式。但是,為了熟練掌握 Docker,重要的是要清楚地瞭解其底層架構和其他基礎知識。
在本章中,讓我們探討 Docker 的概述,並瞭解 Docker 的各個元件如何工作以及相互互動。
什麼是 Docker?
Docker 是一個用於開發、交付和執行應用程式的開源平臺。它使應用程式更容易與基礎設施分離,從而保證軟體快速交付。Docker 透過協調基礎設施管理與應用程式處理,縮短了程式碼建立和部署之間的時間。
應用程式被打包並在稱為容器的鬆散隔離環境中執行,這些環境是 Docker 生態系統中的組成部分。由於這種隔離,更多容器可以併發地在單個主機上執行,從而提高安全性。由於它們很輕量級,容器透過封裝應用程式執行的所有要求來消除對主機設定的需求。由於容器在共享環境中保持一致,因此協作非常順暢。
Docker 為我們提供了全面的工具和平臺來管理容器生命週期:
- 您可以使用容器開發應用程式並支援其元件。
- 您可以使用容器作為所有應用程式的釋出和測試單元。
- Docker 允許您將應用程式無縫且一致地部署到所有環境中,無論是在本地資料中心、雲平臺還是混合基礎設施。
為什麼要使用 Docker?
快速應用程式開發和交付
Docker 透過提供以本地容器形式存在的標準化環境來加快應用程式開發週期。這些容器是 CI/CD 工作流程中不可或缺的一部分,它們確保快速且一致的應用程式交付。
考慮以下示例場景:
- 您團隊中的開發人員在他們的本地系統中編寫程式。他們可以使用 Docker 容器與團隊成員共享他們的工作。
- 然後,他們可以使用 Docker 將他們的應用程式部署到測試環境中,在那裡他們可以執行自動化或手動測試。
- 如果發現錯誤,他們可以在開發環境中修復它,驗證構建,然後將其重新部署到測試環境中進行進一步測試。
- 測試完成後,將應用程式部署到生產環境並將功能交付給客戶就像將更新的映象推送到生產環境一樣簡單。
響應式部署和擴充套件
由於 Docker 是一個基於容器的平臺,因此它促進了高度可移植的工作負載。這使您能夠在各種環境中無縫執行應用程式。其可移植性和輕量級特性允許動態工作負載管理。隨後,企業可以根據需求即時擴充套件應用程式。
最大化硬體利用率
Docker 是傳統虛擬機器的經濟高效的替代方案。這提高了伺服器容量利用率。它允許您建立高密度環境並執行更小的部署。這使企業能夠以有限的資源實現更多目標。
Docker 容器與虛擬機器
虛擬機器 (VM) 和 Docker 容器是現代計算環境中廣泛使用的兩種技術,儘管它們具有不同的用途和優勢。要對哪種技術適合特定用例做出明智的選擇,需要了解它們之間的區別。

架構
Docker 容器 - Docker 容器輕量且可移植,它們共享主機作業系統核心。它們執行在主機作業系統之上,並封裝應用程式及其依賴項。
虛擬機器 - 另一方面,虛擬機器在虛擬機器管理程式之上模擬完整的硬體,包括客戶作業系統。每個虛擬機器執行自己的作業系統例項,該例項獨立於主機作業系統。
資源效率
Docker 容器 - 就資源利用率而言,Docker 容器非常高效,因為它們共享主機作業系統核心,並且與虛擬機器相比需要更少的資源。
虛擬機器 - 虛擬機器消耗更多資源,因為它們需要模擬整個作業系統,包括記憶體、磁碟空間和 CPU。
隔離
Docker 容器 - 容器提供程序級隔離。這意味著它們共享相同的作業系統核心,但具有單獨的檔案系統和網路。這是透過名稱空間和控制組實現的。
虛擬機器 - 相比之下,虛擬機器提供更強的隔離,因為每個虛擬機器都執行其核心並擁有其專用資源。因此,虛擬機器更安全,但也更重。
可移植性
Docker 容器 - 只要在環境中安裝了 Docker,容器就可以在不同的環境(開發或生產)中一致執行。這使得它們高度可移植。
虛擬機器 - 由於底層硬體和虛擬機器管理程式配置的差異,虛擬機器比容器不太靈活。但是,它們可以透過磁碟映像在一定程度上實現可移植性。
啟動時間
Docker 容器 - 容器啟動幾乎是即時的,因為它們利用主機作業系統核心。因此,它們最適合微服務架構和快速擴充套件。
虛擬機器 - 虛擬機器通常需要更長的啟動時間,因為它們需要啟動整個作業系統。這導致啟動時間比容器慢。
用例
Docker 容器 - Docker 容器最適合微服務架構、CI/CD 管道以及需要快速部署和擴充套件的應用程式。
虛擬機器 - 虛擬機器更適合執行具有嚴格安全要求且需要強大隔離的遺留應用程式。
Docker 架構
Docker 使用客戶端-伺服器架構。Docker 客戶端與 Docker 守護程式通訊,後者構建、管理和分發您的 Docker 容器。Docker 守護程式完成所有繁重的工作。
Docker 客戶端還可以連線到遠端 Docker 守護程式,或者守護程式和客戶端可以在同一臺機器上執行。它們透過 REST API、UNIX 套接字或網路介面進行通訊。

Docker 守護程式
Docker 守護程式(也稱為 dockerd)管理 Docker 物件,例如容器、映象、卷、網路等。它偵聽對此的 Docker API 請求。為了管理 Docker 服務,它也可以與其他守護程式通訊。
Docker 客戶端
為了與 Docker 互動,大多數使用者使用 Docker 客戶端,例如 CLI。在命令列中,當您執行 Docker 命令(例如 Docker run)時,它會將命令傳送到 dockerd 以執行。Docker 客戶端可以與多個守護程式通訊。
Docker Desktop
Docker Desktop 是訪問 Docker 的一種簡單方法。它是一個可以在 Windows、Mac 和 Linux 上執行的應用程式。它允許您執行所有與 Docker 相關的功能。Docker Desktop 包含守護程式、客戶端、compose、Kubernetes 等。
Docker 註冊中心
Docker 註冊中心儲存 Docker 映象。最流行的公共 Docker 註冊中心是 Docker Hub,任何人都可以使用。預設情況下,Docker 在 Docker Hub 上查詢映象。
當您執行 docker pull 或 run 命令時,dockerd 會從註冊中心拉取所需的映象。Docker push 命令也是如此。
Docker 物件
Docker 具有與之關聯的映象、容器、網路、卷、外掛和其他物件,您將在整個 Docker 之旅中使用這些物件。讓我們簡要概述其中一些物件。
映象
映象是一個只讀模板,其中包含 Docker 容器建立指令。映象通常繼承自另一個映象,並進行一些額外修改。例如,您可以建立一個基於 Ubuntu 基礎映象構建的 Docker 映象,在其之上,您有 Apache web 伺服器、您的應用程式以及一些特定於您的應用程式的配置。
您可以建立自己的映象,也可以使用其他人從註冊中心建立的映象。要構建自定義映象,您可以使用 Dockerfile,其中包含構建映象所需的所有指令和步驟。Dockerfile 中的一條指令是在基礎映象之上的一個映象層。
在重建 Dockerfile 時,只有與已更改的指令關聯的層才會被重建。這就是使 Docker 映象如此輕量、快速和小巧的原因。
容器
Docker 容器是 Docker 映象的執行例項。Docker 允許您建立、執行、終止、移動或刪除容器。Docker 容器基於關聯的映象和您啟動容器時提供的配置。當您停止或刪除容器時,未持久儲存到永續性儲存(例如卷等)的更改將丟失。
建立 Docker 容器的示例命令是:
docker run -i -t ubuntu /bin/bash
當您執行此命令時,會發生以下情況:
- 如果您之前沒有在本地拉取過 Ubuntu 映象,Docker 會透過內部執行 Docker pull 命令從 Dockerhub 拉取。
- 然後,它透過內部執行 Docker create 命令建立一個新的容器。
- 作為最後一層,它為容器分配一個讀寫檔案系統。它還會建立一個預設的網路介面。
- 容器啟動後,它將執行 /bin/bash 命令。-i 和 -t 標記以互動方式執行容器,並附加一個終端,以便您執行更多命令。
網路
藉助 Docker 網路,容器可以相互通訊。儘管容器預設情況下是隔離的,但您可以使用 Docker 構建虛擬網路,讓容器安全地相互通訊。這些網路的複雜程度可以從簡單到複雜不等,不同的驅動程式選項提供不同的功能。
對於基本連線,您可以使用預設的橋接網路或為您的應用程式建立自定義網路。Docker 網路簡化了構建需要相互通訊的服務的多容器應用程式。
儲存
傳統的應用程式依賴於為主機提供動力的儲存系統。Docker 透過卷提供了更靈活的方法。儲存在容器外部的資料目錄稱為卷。這樣可以確保無論容器停止還是恢復,您的資料都安全無虞。
對於永續性儲存需求,您可以繫結掛載主機計算機上的特定目錄,或建立命名捲來管理應用程式資料。Docker 卷簡化了資料管理,並透過將應用程式的資料與容器生命週期分離來確保永續性。
結論
總之,對於尋求簡化應用程式開發、部署和管理的公司來說,Docker 的容器化技術是一個強大的選擇。
Docker 的方法加快了開發週期,促進了可擴充套件性和可移植性,並最大限度地利用了硬體資源。企業可以透過使用 Docker 容器來提高其軟體交付流程的敏捷性、效率和成本效益。
常見問題
Q1. Docker 的核心概念是什麼?
Docker 背後的基本理念是容器化。它將您的程式及其所有依賴項編譯成一個容器,這是一個自包含的實體。此容器與其他容器隔離執行,確保在不同環境中的一致行為。可以將其視為一個預配置的盒子,其中包含您的應用程式在任何地方正常執行所需的一切。
Q2. Docker 最適合用於什麼?
Docker 是一個用於更快速地管理、部署和開發應用程式的出色工具。其輕量級容器促進了更輕鬆、更快速的構建。
此外,它們支援應用程式在各種環境中輕鬆擴充套件和遷移。此外,透過允許共享容器化應用程式,Docker 簡化了團隊協作。
Q3. Docker 的生命週期是什麼?
Docker 容器的生命週期始於建立映象,映象充當藍圖。接下來,使用此映象啟動容器例項。
可以根據需要啟動、停止、暫停和重新啟動容器。最後,當不再需要時,可以刪除容器。
Q4. Docker 是 PaaS 還是 IaaS?
Docker 不是基礎設施即服務 (IaaS) 或平臺即服務 (PaaS)。它專注於容器化,獨特的應用程式打包和執行技術。
IaaS 提供虛擬化計算資源,而 PaaS 提供完整的開發和部署環境。Docker 與 IaaS 和 PaaS 解決方案都能很好地配合使用。
Q5. 什麼是 Dockerfile?
Dockerfile 是一個文字檔案,其中包含有關如何建立 Docker 映象的指令。它指定映象中必須存在的庫、應用程式程式碼和作業系統。可以將其視為一本食譜,指導 Docker 如何精確地執行元件和操作,以便為您的應用程式生成可工作的容器映象。