Home >> Blog >> Docker 概述 - 比虛擬機器更輕量化的軟體運作環境

Docker 概述 - 比虛擬機器更輕量化的軟體運作環境

Docker 是一個用於開發、發布和運行應用程式的開放平台。Docker 使您能夠將應用程式與基礎架構分離,以便您可以快速交付軟體或程式碼。使用 Docker,您可以像管理應用程式一樣管理基礎設施。通過利用 Docker 快速交付、測試和部署程式碼的方法,您可以顯著減少編寫程式碼和在生產環境中運行之間的延遲。

Docker 平台

Docker 提供了在稱為容器的鬆散隔離環境中打包和運行應用程式的能力。隔離和安全性允許您在給定主機上同時運行多個容器。容器是輕量級的,包含運行應用程式所需的一切,因此您無需依賴主機上當前安裝的內容。您可以在工作時輕鬆共享容器,並確保與您共享的每個人都獲得以相同方式工作的同一個容器。

Docker 提供工具和平台來管理容器的生命週期:

  • 使用容器開發您的應用程式及其支援組件。
  • 容器成為分發和測試應用程式的單元。
  • 準備就緒後,將應用程式部署到生產環境中,作為容器或編排的服務。無論您的生產環境是本地數據中心、雲提供商還是兩者的混合,這都是一樣的。

我可以使用 Docker 做什麼?

快速、一致地交付您的應用程式

Docker 通過允許開發人員使用提供應用程式和服務的本地容器在標準化環境中工作來簡化開發生命週期。容器非常適合持續集成和持續交付 (CI/CD) 工作流程。

考慮以下示例場景:

  • 您的開發人員在本地編寫程式碼並使用 Docker 容器與同事分享他們的工作。
  • 他們使用 Docker 將他們的應用程式推送到測試環境中並執行自動化和手動測試。
  • 當開發者發現bug時,可以在開發環境中修復,重新部署到測試環境中進行測試和驗證。
  • 測試完成後,將修復程式提供給客戶就像將更新的image推送到生產環境一樣簡單。

響應式部署和擴展

Docker 基於容器的平台允許高度可移植的工作負載。Docker 容器可以在SEO開發人員的本地筆記電腦、數據中心的實體或虛擬機、雲提供商或混合環境中運行。

Docker 的可移植性和輕量級特性還使得動態管理工作負載、根據業務需求近乎live地擴展或拆除應用程式讓整體運行服務變得容易。

在相同硬體上運行更多工作負載

Docker 是輕量級和快速的。它為基於管理程式的虛擬機提供了一種可行且經濟高效的替代方案,因此您可以使用更多的計算容量來實現業務目標。Docker 非常適合高密度環境以及需要用更少資源完成更多工作的中小型部署。

Docker 架構

Docker 使用客戶端-伺服器架構。Docker客戶端與 Docker守護進程對話,後者負責構建、運行和分發 Docker 容器的繁重工作。Docker 客戶端和守護程式可以 在同一系統上運行,或者您可以將 Docker 客戶端連接到遠程 Docker 守護程式。Docker 客戶端和守護程式使用 REST API,通過 UNIX 套接字或網路接口進行通信。另一個 Docker 客戶端是 Docker Compose,它允許您使用由一組容器組成的應用程式。

Docker 守護進程

Docker 守護程式 ( dockerd) 偵聽 Docker API 請求並管理 Docker 對象,例如image、容器、網路和卷。守護進程還可以與其他守護進程通信以管理 Docker 服務。

Docker 客戶端

Docker 客戶端 ( docker) 是許多 Docker 用戶與 Docker 交互的主要方式。當您使用諸如docker run之類的命令時,客戶端會將這些命令發送到dockerd執行它們。該docker命令使用 Docker API。Docker 客戶端可以與多個守護進程通信。

Docker 桌面

Docker Desktop 是一個易於安裝的應用程式,適用於您的 Mac 或 Windows 環境,使您能夠構建和共享容器化應用程式和微服務。Docker Desktop 包括 Docker 守護程式 ( dockerd)、Docker 客戶端 ( docker)、Docker Compose、Docker Content Trust、Kubernetes 和 Credential Helper。有關更多信息,請參閱Docker 桌面。

Docker 註冊表

Docker註冊表存儲 Docker image。Docker Hub 是一個任何人都可以使用的公共註冊表,並且 Docker 默認配置為在 Docker Hub 上查找image file。您甚至可以運行自己的私有註冊表。

當您使用docker pullordocker run命令時,將從您配置的註冊表中提取所需的image。當您使用該docker push命令時,您的image會被推送到您配置的註冊表中。

Docker 對象

當您使用 Docker 時,您正在創建和使用image、容器、網路、卷、外掛和其他對象。這裡簡要概述了其中一些對象。

圖片

image是一個只讀模板,其中包含創建 Docker 容器的說明。通常,一個image基於另一個image,並帶有一些額外的自定義。例如,您可以基於該image構建一個imageubuntu ,但安裝 Apache Web 伺服器和您的應用程式,以及使您的應用程式運行所需的配置詳細信息。

您可以創建自己的image,也可以只使用其他人創建並在註冊表中發布的image。要構建您自己的image,您需要使用簡單的語法創建一個Dockerfile ,用於定義創建和運行image所需的步驟。Dockerfile 中的每條指令都會在image中創建一個層。當您更改 Dockerfile 並重建image時,僅重建那些已更改的層。與其他虛擬化技術相比,這是使image如此輕量、小巧和快速的部分原因。

容器

容器是image的可運行實例。您可以使用 Docker API 或 CLI 創建、啟動、停止、移動或刪除容器。您可以將容器連接到一個或多個網路,將存儲附加到它,甚至可以根據其當前狀態創建新image。

默認情況下,一個容器與其他容器及其主機的隔離相對較好。您可以控制容器的網路、存儲或其他底層子系統與其他容器或主機的隔離程度。

容器由其image以及您在創建或啟動它時提供給它的任何配置選項定義。當容器被移除時,任何未存儲在持久存儲中的狀態更改都會消失。

示例docker run命令

以下命令運行一個ubuntu容器,以交互方式附加到您的本地命令行會話,然後運行/bin/bash.

$ docker run -i -t ubuntu /bin/bash

當您運行此命令時,會發生以下情況(假設您使用的是默認註冊表配置):

  1. 如果您在本地沒有ubuntuimage,Docker 會從您配置的註冊表中提取它,就像您docker pull ubuntu手動運行一樣。
  2. Docker 會創建一個新容器,就像您docker container create 手動運行命令一樣。
  3. Docker 為容器分配一個讀寫文件系統,作為它的最後一層。這允許正在運行的容器在其本地文件系統中創建或修改文件和目錄。
  4. Docker 創建了一個網路接口來將容器連接到默認網路,因為您沒有指定任何網路選項。這包括為容器分配 IP 地址。默認情況下,容器可以使用主機的網路連接連接到外部網路。
  5. Docker 啟動容器並執行/bin/bash. 因為容器以交互方式運行並附加到您的終端(由於-iand-t 標誌),所以您可以在輸出記錄到終端時使用鍵盤提供輸入。
  6. 當您鍵入exit終止/bin/bash命令時,容器會停止但不會被刪除。您可以重新啟動或刪除它。

底層技術

Docker 是用Go 編程語言編寫的,並利用 Linux 內核的幾個特性來提供其功能。Docker 使用一種稱為容器namespaces的技術來提供隔離的工作空間。當您運行容器時,Docker 會為該容器創建一組 命名空間。

這些命名空間提供了一層隔離。容器的每個方面都在單獨的命名空間中運行,並且它的訪問權限僅限於該命名空間。