什麼是 Docker?

Alan Zeichick | 資深撰稿人 | 2025 年 12 月 8 日

軟體開發早就不再侷限於「這在我的電腦上跑得好好的」!這多半要感謝容器化,讓應用程式能夠在內部部署和多部雲端伺服器中順暢執行,並視需要透過隔離且一致的環境來移動和擴展。

Docker 是開放原始碼的標準軟體平台,可協助開發人員快速建置、測試及部署容器化應用程式。難怪 Docker 及相關的容器服務在過去幾年受到廣泛採用。Docker 在 2013 年從鮮為人知且偏向技術性的開放原始碼技術為起點不斷演進,目前已演變成許多企業產品正式支援的標準化執行時期環境。

如之前所述,我們已經走了很長一段路。

什麼是 Docker?

Docker 是開放原始碼平台,可讓開發人員和系統管理員將應用程式封裝到容器中。然後這些容器可推送至部署平台,例如內部部署伺服器或雲端的伺服器,然後直接執行。您可以在單一伺服器上執行多個 Docker 容器,每個容器都有自己的應用程式,而這些應用程式會彼此隔離,以提供資料安全性和可靠性。

在任何相容伺服器上都能執行 Docker 容器的靈活性,是這項技術最大的一項優勢。Docker 最初是由目光遠大的軟體工程師 Solomon Hykes 提出,他在 PyCon 2013 會議中介紹了這項概念。除了專屬團隊之外,Hykes 也致力解決將應用系統部署至伺服器的挑戰,這項工作通常涉及大量資源、繁瑣且容易出錯的流程。Docker 旨在簡化和最佳化整段應用程式生命週期。

目前 Docker 容器用於涉及數千個容器和數百部伺服器的關鍵業務大規模部署。Docker 以容器化的基本概念為基礎,帶來創新的全新應用程式部署方法。Docker 引入一組強大的功能,將容器化提升到新高度。

為何選擇容器?

Linux 容器自 2008 年以來就獲得採用,但 2013 年 Docker 容器出現後,則使運用範圍更廣。容器的主要優點是可容納執行應用程式或特定服務所需的一切元件,包括所有程式庫、圖形 (例如圖示) 或使用者介面元件、系統工具,以及程式執行時期可執行檔。Docker 容器的設計可在特定作業系統 (例如 Linux 或 Windows) 上執行。Docker 容器通常可以部署到執行該作業系統的任一伺服器 (或筆記型電腦或桌上型電腦),無須進行任何組態變更。

Docker 與 Kubernetes 的比較

Docker 生態系統涉及建立容器、將所有應用程式部分放入這些容器中,並將進行封裝以便部署。如果只有少數容器,這種做法很適合,但如果有數百或數千個呢?Kubernetes 自動化平台在這裡可以派上用場。

Kubernetes 就像 Docker 一樣,是整個科技業廣泛支援的開放原始碼專案。您可以使用此工具來自動化部署 Docker 容器至伺服器、監控其效能、視需要啟動新容器、將容器更新為最新版本,以及在時間結束時將其關閉。

Kubernetes 的主要優點是可協助管理跨多部伺服器部署多個容器的作業複雜性,因此對任何大規模部署容器的技術 (不論是雲端或內部部署) 而言都非常重要。Kubernetes 會自動調度容器生命週期,將容器分散在代管基礎架構上。Kubernetes 會視需要快速上下擴展或縮減資源。

重點精華

  • 容器會封裝執行應用程式所需的一切元件,包括應用程式的二進位執行檔、程式庫、映像檔和其他資料,以及應用程式的組態詳細資訊。
  • Docker 是建立容器化應用系統的最常見格式之一,為開放原始碼,並廣受所有主要雲端供應商的支援。
  • 使用 Docker 時,不需要手動安裝和設定應用程式,因為這項流程會在容器建構時完成。
  • 透過隔離,可以將許多容器安裝在單一伺服器上,以充分發揮伺服器硬體的價值。
  • Kubernetes 等業界標準工具可自動跨網路部署數百、甚至數千個容器化應用程式。

Docker 詳解

Docker 是一個開放式的應用程式開發架構,專為開發人員和管理員而設計。這項技術採用 DevOps 模型,不遵循開發人員建立程式碼的傳統方法,而是由開發人員負責管理雲端應用程式,並將其「丟給」接著部署和管理應用程式的個別管理團隊。

只要使用 Docker,開發人員就能輕易在任何系統上建立、包裝、運送和執行應用系統,這些資料幾乎都是輕量型、可攜式、可自給自足的容器。現在,開發人員可以專注確保應用程式符合組織的需求,不必擔心基礎作業系統或部署系統。

此外,開發人員可從成千上萬個能在 Docker 環境中執行的開源容器化應用程式中選擇。Docker 致力為 DevOps 團隊持續整合與開發工具鏈,並降低系統架構限制和複雜性。有了 Docker 和容器調度雲端服務 (例如 Kubernetes),任何開發人員都可以在本機建立容器化應用程式,然後在雲端服務的生產環境中執行這些應用程式。

使用 Docker 的優點

Docker 容器讓更多人得以參與開發工作:軟體產業中的個人通常會因為專業領域 (前端、後端) 或任何集中情況而將開發人員分開。熟悉基本概念的任何人都可以使用 Docker 建立、部署及管理容器。相較於將軟體直接安裝到伺服器的傳統方法,Docker 的容器化服務提供許多額外的優點。

這些優點包括:

  • 一致性:封裝應用程式及其容器內的相依性後,可產生一致的程式實際執行時期行為和效能。
  • 高效率的資源管理:Docker 的共用核心架構可讓多個容器以最少的負荷在單一主機上執行,並充分運用硬體資源。
  • 增強的可擴充性:在容器內執行的應用程式超載時,Kubernetes 管理程式可以在另一部伺服器上建立該容器的其他執行處理。負載平衡器接著可以開始在執行中的執行處理之間運作。
  • 隔離與安全性:容器提供流程隔離,可提升伺服器上每個執行應用程式的安全性。
  • 微服務架構:容器化技術是微服務架構的關鍵驅動因素,將應用程式細分為在自己的容器中執行的小型獨立服務。這提高了模組性、可擴充性和可維護性。
  • 可攜性:容器提供各種環境 (從開發到生產) 的應用程式可攜性,讓您輕鬆在不同的基礎架構設定之間移動。
  • 快速部署:由於容器能快速啟動並具備高效率的資源使用率,因此可輕鬆停止和啟動,使程式實際執行程式碼的更新更簡單,並提供有效的負載平衡。
  • 可靠且有效率的資源使用率:伺服器可以專用於單一 Docker 容器。不過,如果容器不需要所有伺服器的資源,則該伺服器也可以用來執行其他容器,藉此妥善運用硬體。
  • 簡化管理:Docker 的直觀式介面和一組強大的工具和命令可協助簡化容器管理,讓您更容易監控、更新及調整應用程式。
  • 加快部署速度和 CI/CD 整合:在伺服器上安裝和設定軟體可能需要數分鐘或數小時,而部署容器只要幾秒鐘。Kubernetes 自動化平台對常用於執行雲端原生應用程式的現代化持續整合/持續部署方法而言非常重要。

Docker 的運作方式

Docker 的核心概念是映像檔和容器。Docker 映像檔包含執行軟體所需的一切元件,包括執行檔程式碼、驅動程式、工具、命令檔、程式庫、部署等等。

Docker 容器是 Docker 映像檔的執行中執行處理。不過 Docker 容器與傳統虛擬機器不同,會在主機作業系統的核心上執行,因此映像檔不會包含個別的作業系統。雖然這讓容器輕量且可攜,但也需要為特定作業系統設定容器。如果 Docker 容器存放已寫入並編譯至目標 Linux 的應用程式,只能在以 Linux 為基礎的伺服器上執行,已寫入並編譯至目標 Windows 的應用程式也是同理。

每個 Docker 容器都有自己的檔案系統、自己的網路堆疊及自己的 IP 位址、自己的處理作業空間,以及針對 CPU 和記憶體定義的資源限制。由於 Docker 容器不需要啟動作業系統就能運作,因此會立即啟動。Docker 會彼此隔離,將主機作業系統的資源與應用程式分開。因此可以在單一伺服器上執行許多容器,每個容器彼此安全地分隔,但共用基礎作業系統和硬體。

Docker 架構詳解

Docker 生產系統的架構需要 Docker 常駐程式、Docker 用戶端、容器映像檔和登錄,以及容器調度與管理。這些工作負載可以在雲端或內部部署環境中執行。

  • Docker 協助程式是在每個伺服器、桌面或工作站上執行的背景處理作業,會代管 Docker 容器。這個程式會管理與容器的所有互動,例如啟動容器、停止容器,以及將網路通訊遞送給容器或從容器進行路由。
  • Docker 用戶端是開發人員和管理員用來與 Docker 協助程式互動的工具。在執行命令行介面之後,Docker 用戶端就可以提供圖形化介面。
  • 容器映像檔是用來佈建容器的唯讀範本。Docker 協助程式會讀取容器映像檔,告訴程式如何在伺服器上啟動及設定容器,然後在該容器內啟動應用程式。
  • 容器登錄是儲存 Docker 映像檔及其描述的集中式資源。Docker 客戶端或 Kubernetes 自動化平台會指示 Docker 協助程式存取容器登錄,並視需要擷取及啟動每個容器映像檔。
  • 容器調度流程是管理數百個或數千個容器的流程,這些容器位於有數十或數百個伺服器的雲端或內部部署資料中心。如果是相對較小的部署,組織可以使用 Docker 平台內建的 Docker Swarm 功能。如果是範圍包括整個企業的較大型部署,Kubernetes 是業界標準。
  • 容器管理包括調度、調整、負載平衡、記錄和日誌分析,以及安全性和存取控制。

Docker 與虛擬機器的比較

傳統虛擬機器 (VM) 與容器之間的差異極大。VM 是伺服器 (或任何電腦) 的完整軟體模擬,包括作業系統、裝置驅動程式、應用程式及資料。在 VM 設定中,Hypervisor 會在伺服器上執行並調度虛擬機器,執行與 Docker Engine 在容器中執行的相同功能。

相反地,容器只保存應用程式和資料,並使用主機電腦作業系統和裝置驅動程式。

VM 是用來執行多個作業系統,並在單一實體機器上提供安全、隔離的應用程式環境。雖然 VM 提供某些優勢,但也有以下限制:

  • 資源使用效率低:每個 VM 都需要完整的作業系統,因此比起容器還要多耗用記憶體、儲存及處理資源。
  • 有限的可擴充性:由於 VM 模擬整台電腦,因此需要更多資源來管理間接費用。如此會限制電腦執行實用任務的能力。
  • 啟動時間緩慢:啟動 VM 時需要載入整個作業系統。這項流程需要一些時間,因此會阻礙整體系統效能。

另一方面,容器提供用於執行應用程式的隔離環境,同時也會共用主機作業系統核心,無須在每個容器內安裝完整的作業系統。這個共用的核心架構有多種優點:

  • 資源使用有效率:容器會共用主機的核心,相較於 VM 能降低對記憶體和儲存空間的需求。
  • 增強的可擴充性:水平調整容器化應用程式是 Docker 的主要目標。其設計可讓您以最少的資源負荷快速部署多個執行個體。
  • 快速啟動時間:容器只需幾秒鐘即可啟動,而無須啟動完整作業系統,因此能更快部署應用程式並改進系統效能。
相反地,Docker 容器會使用主機系統的作業系統和裝置驅動程式,因此可將更多伺服器的處理器和記憶體資源配置給應用程式。一台執行 20 個 Docker 容器的 Linux 伺服器,只需要執行單一 Linux 執行處理。
虛擬機器架構與 Docker 容器的比較。

容器化與傳統部署的比較

在傳統部署中,軟體會載入伺服器,或設定作業系統、裝置驅動程式、應用程式及資料的虛擬機器上。這個緩慢的流程最適合用於通常在專用伺服器 (雲端或資料中心) 上執行的大型單體式應用系統。

相反地,容器提供一種輕量的方式,將應用程式及其所有相依性封裝成映像檔。接著,該映像檔會儲存在儲存區域中,只要幾秒鐘即可在目標伺服器上擷取並執行該映像檔。Docker 容器模型在使用自動化工具時更容易擴展,而且符合成本效益,可讓開發人員將伺服器的功能發揮到極致。

Docker 的要素

Docker 的核心概念是先前描述的圖片和容器。以下是 Docker 容器系統的其他元件:

  • Docker Engine:Docker Engine 是負責建置、執行及管理容器的核心程式實際執行環境。這個引擎提供主機作業系統與容器之間的介面,以提供最佳的資源配置與效能。
  • Docker Hub:Docker Hub 是雲端儲存區域,可提供大量的公用和專用映像檔,並做為共用和協作 Docker 相關專案的平台。
  • Docker Compose:Docker Compose 是可簡化多容器應用程式定義和管理流程的工具。這項工具可讓開發人員在單一檔案 (稱為 YAML 檔案) 中定義和設定多個容器及其相依性,進而更輕鬆地部署和調整複雜的應用程式。
  • Docker Swarm:Docker Swarm 是一種可建立 Docker 引擎群組的叢集和調度工具。此工具可讓您跨多部主機管理許多容器,提供負載平衡、服務探索及可擴充應用程式部署等功能。Docker Swarm 已幾乎完全被用來管理與調度容器的開源平台 Kubernetes 取代。
  • Docker CLI 和 API:Docker 的命令行介面 (CLI) 為開發人員和管理員提供直觀的命令,以及簡單的命令檔工具來管理容器,包括啟動、停止和監控容器狀態的作業。Docker API 允許使用更複雜的自動化和調度工具 (例如 Kubernetes),能比 CLI 更輕鬆地執行這些相同的功能。

常見的 Docker 使用案例

Docker 容器化具備多功能性和強大功能,因此成為各產業組織的最佳選擇。以下是 Docker 最常見的用途,通常與 Kubernetes 搭配使用:

  • 大數據和分析:高效的資源利用率和可擴充性,使容器成為大數據和分析應用程式的理想選擇。財務和醫療照護等資料密集領域的公司使用容器來處理和分析大型資料集,將資源配置最佳化並提升效能。
  • 雲端原生應用程式:隨著雲端運算的興起,容器已成為建置雲端原生應用程式的關鍵支援工具。如果能將應用程式封裝和部署為容器,就能享有跨雲端供應商的可攜性和靈活性,不必受限於特定供應商即可擁有雲端運算的優勢。
  • DevOps 和持續整合: Spotify 和 Pinterest 等企業已利用容器來簡化其 DevOps 流程,並實現持續整合。容器提供一致且可重現的環境,可簡化在開發管線中測試和部署程式碼變更的流程。
  • 以微服務為基礎的架構: Netflix、Uber 和 Airbnb 等領先的消費性技術公司採用容器化技術來建置和管理其微服務型架構。容器能夠平行執行多項服務來處理複雜的應用程式佈局,是成功的關鍵。
  • Web 應用程式部署:容器廣泛用於部署 Web 應用程式,提供一致且可靠的效能。容器提供可擴展且高度安全的環境,適用於簡單的部落格和複雜的電子商務平台。

開始使用容器

如果是剛接觸 Docker 和容器的人員,可參考以下逐步指南開始使用:

  1. 安裝 Docker。 第一步是在您偏好的作業系統上下載並安裝 Docker。Docker 為 Windows、macOS 和各種 Linux 發行套件提供安裝套件,讓許多使用者都能存取此套件。
  2. 建立 Docker 映像檔。 從建立 Docker 映像檔開始,此映像檔可做為容器的藍圖。這包括寫入 Dockerfile (定義建立映像檔所需步驟的文字檔),此文字檔包含基礎映像檔、相依性安裝及應用程式組態。Docker 映像檔建立在圖層中,每個圖層代表 Dockerfile 中的某個步驟。
  3. 建置並執行。 Docker 映像檔準備就緒後,您就可以建置並執行第一個容器。Docker 的命令行介面提供直覺式命令來管理容器,讓您能夠啟動、停止及監控其狀態。
  4. 探索 Docker 的生態系統。 Docker 提供一組豐富的工具和服務,協助您提升容器化體驗。Docker Hub 是雲端儲存庫,提供大量立即可用的映像檔,可做為共用與協同合作 Docker 相關專案的平台。Docker Compose 能簡化多容器應用程式管理流程。

Docker 最佳實務

當您探索如何在組織內使用 Docker 時,請考慮許多採用雲端原生開發的公司所遵循的最佳實務:

  • 打造最佳化的映像檔大小和圖層:較小的 Docker 映像檔更容易建置、測試及部署。您可以在建立映像檔之前,先從系統移除不必要的檔案,再以小型基礎映像檔啟動。
  • 管理安全性和權限:只有獲得授權的使用者才能存取容器,而那些容器中的應用程式不應該損毀或威脅安全性。請遵循標準指引;切勿以 root 使用者身分執行應用程式,並應隨時安裝最新修正程式,以及使用 Docker 的存取控制功能來限制容器的 Linux 或 Windows 權限。
  • 高效率的網路和負載平衡:容器在鬆散耦合時最有效率,也就是在網路上的任何合理位置都可建立和移動容器,不必堅持放在固定位置。您可以使用 Docker Network 來定義靈活的網路架構,以及使用 Nginx 等工具來遞送大規模部署中容器之間的流量,維持負載平衡。
  • 監控和記錄 Docker:與部署在單一伺服器上的單體式應用程式不同,無需使用自動化工具,即可監控大規模容器化應用程式的狀況。規劃集中管理每個容器的日誌,然後使用監控工具來偵測錯誤並視覺化呈現效能指標。

打造最佳化的容器策略以推動成長

Oracle 提供建立和部署雲端原生應用程式 (包括工具、服務和自動化) 所需的一切,讓開發團隊能夠快速建置,同時減少營運任務。

Oracle 雲端原生服務在 Oracle Cloud Infrastructure (OCI) 上執行,相較於許多其他雲端供應商,能提供更高效能且更低成本的標準型平台。OCI 利用基於開放原始碼和開放標準 (例如 Docker 和 Kubernetes) 的服務,可讓開發人員在任何雲端或內部部署環境中執行應用程式。

過去幾年來,Docker 和相關技術 (包括 Kubernetes) 獲得廣泛的採用和巨大的成功。Docker 在 2013 年從鮮為人知且偏向技術性的開放原始碼技術為起點不斷演進,已演變成經實證適合最大規模企業部署的標準化執行時期環境。

Docker 在目前是模組化雲端原生軟體的重要元件,可提供可擴充性、韌性、靈活性並節省成本。瞭解如何開始使用。

Docker 常見問題

什麼是容器?

容器會將應用程式的所有程式碼與相依性都以標準格式組合,讓應用程式能夠在大多數伺服器上快速可靠地執行。Docker 是容器的業界標準開源格式。

為什麼要使用 Docker 而非傳統的部署方法?

原本管理員必須將應用程式的檔案 (包括可執行二進位檔案、程式庫及資料) 安裝到伺服器上,然後設定所有項目以正確運作。若要在伺服器上同時安裝和執行多個應用程式以充分提高硬體使用率,管理員需要確保這些應用程式不會彼此干擾,某個應用程式失敗不會導致其他應用程式當機。保守地說,這可能會非常複雜,而且很難自動化處理。

但若建立一個存放應用程式的容器,表示容器也具有可執行二進位檔案、程式庫和資料,而且一切都已預先設定好。這時若要執行應用程式,只需將容器複製到伺服器,Docker Engine 和 Docker 協助程式就會處理其餘作業。此外容器會被隔離,因此如果某個應用程式失敗,也不會影響在其他容器中執行的應用程式。Kubernetes 等工具也可以大規模自動部署和管理容器化應用程式。

Docker 是否可以完全取代虛擬機器?

您可將 Docker 和虛擬機器視為互補的技術。容器使用主機電腦的作業系統和裝置驅動程式。因此容器快速又有效率,而且在多數情況下通常更具吸引力。

但在某些情況下,虛擬機器是更好的選擇。這些情況包括在專用作業系統中執行應用程式但不共用其任何資源、需使用特殊裝置驅動程式,或在相同伺服器上執行多個作業系統。

Docker 如何與 Kubernetes 整合?

Kubernetes 是管理 Docker 容器的開放原始碼系統。這個系統會部署、啟動和停止容器,視需要使用多個執行處理以進行擴展,甚至在應用程式失敗或停止回應時重新啟動容器。Docker Compose 是基本 Docker 系統的一部分,可處理小型容器部署,而 Kubernetes 則適合用來擴展至數十、數百甚至數千個容器。

Docker 在企業雲端策略中扮演何種角色?

Docker 容器非常適合用於在雲端部署軟體。這可能是在單一容器內執行的傳統應用程式,或由數十個在自己的容器中執行的個別服務組成的微服務型雲端原生應用程式。容器可以簡化雲端服務開發和部署,並提升企業應用程式的可擴充性、安全性、法規遵循程度、測試和可用性。Docker 和 Kubernetes 甚至可以充分利用雲端伺服器,從而降低執行時期成本。