Docker 概述

Docker 是一個用於開發、釋出和執行應用程式的開放平臺。Docker 允許您將應用程式與基礎設施分離,以便您可以快速交付軟體。使用 Docker,您可以以與管理應用程式相同的方式管理基礎設施。透過利用 Docker 的程式碼釋出、測試和部署方法,您可以顯著減少編寫程式碼和在生產環境中執行程式碼之間的時間延遲。

Docker 平臺

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

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

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

我可以使用 Docker 做什麼?

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

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

考慮以下示例場景

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

響應式部署和擴充套件

Docker 的基於容器的平臺允許高度可移植的工作負載。Docker 容器可以在開發人員的本地筆記型電腦上執行,也可以在資料中心的物理機或虛擬機器上執行,也可以在雲提供商上執行,或者在混合環境中執行。

Docker 的可移植性和輕量級特性也使動態管理工作負載變得容易,可以根據業務需求在近乎即時的情況下擴充套件應用程式和服務,或者將其拆除。

在同一硬體上執行更多工作負載

Docker 輕量級且快速。它提供了一種可行的、具有成本效益的替代基於管理程式的虛擬機器的方法,因此您可以使用更多伺服器容量來實現您的業務目標。Docker 非常適合高密度環境以及需要用更少資源做更多事情的小型和中型部署。

Docker 架構

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

Docker Architecture diagram

Docker 守護程序

Docker 守護程序 (dockerd) 偵聽 Docker API 請求並管理 Docker 物件,例如映象、容器、網路和卷。守護程序還可以與其他守護程序通訊以管理 Docker 服務。

Docker 客戶端

Docker 客戶端 (docker) 是許多 Docker 使用者與 Docker 互動的主要方式。當您使用 docker run 等命令時,客戶端將這些命令傳送到 dockerddockerd 會執行這些命令。docker 命令使用 Docker API。Docker 客戶端可以與多個守護程序通訊。

Docker Desktop

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

Docker 登錄檔

Docker 登錄檔儲存 Docker 映象。Docker Hub 是一個公共登錄檔,任何人都可以使用,Docker 預設情況下會在 Docker Hub 上查詢映象。您甚至可以執行自己的私有登錄檔。

當您使用 docker pulldocker run 命令時,Docker 會從您配置的登錄檔中拉取所需的映象。當您使用 docker push 命令時,Docker 會將您的映象推送到您配置的登錄檔。

Docker 物件

當您使用 Docker 時,您將建立和使用映象、容器、網路、卷、外掛和其他物件。本節簡要概述了其中一些物件。

影像

映象是一個包含建立 Docker 容器指令的只讀模板。通常,映象基於另一個映象,並進行一些額外的自定義。例如,您可以構建一個基於 ubuntu 映象的映象,但安裝了 Apache Web 伺服器和您的應用程式,以及使您的應用程式執行所需的配置詳細資訊。

您可以建立自己的映象,也可以只使用其他人建立併發布到登錄檔中的映象。要構建自己的映象,您需要建立一個 Dockerfile,其中包含用於定義建立和執行映象所需的步驟的簡單語法。Dockerfile 中的每個指令都會在映象中建立一個層。當您更改 Dockerfile 並重新構建映象時,只有更改的層會被重新構建。這是與其他虛擬化技術相比,映象如此輕量級、小巧且快速的部分原因。

容器

容器是映象的可執行例項。您可以使用 Docker API 或 CLI 建立、啟動、停止、移動或刪除容器。您可以將容器連線到一個或多個網路,將儲存連線到容器,甚至可以基於其當前狀態建立一個新的映象。

預設情況下,容器與其他容器及其主機機器隔離得相當好。您可以控制容器的網路、儲存或其他底層子系統與其他容器或主機機器的隔離程度。

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

示例 docker run 命令

以下命令執行一個 ubuntu 容器,以互動方式連線到您的本地命令列會話,並執行 /bin/bash

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

當您執行此命令時,會發生以下情況(假設您使用的是預設登錄檔配置)

  1. 如果您在本地沒有 ubuntu 映象,Docker 會從您配置的登錄檔中拉取它,就好像您手動運行了 docker pull ubuntu 一樣。

  2. Docker 建立一個新的容器,就好像您手動運行了 docker container create 命令一樣。

  3. Docker 為容器分配了一個讀寫檔案系統,作為其最後一層。這允許正在執行的容器在其本地檔案系統中建立或修改檔案和目錄。

  4. Docker 建立一個網路介面,將容器連線到預設網路,因為您沒有指定任何網路選項。這包括為容器分配 IP 地址。預設情況下,容器可以使用主機機器的網路連線連線到外部網路。

  5. Docker 啟動容器並執行 /bin/bash。由於容器以互動方式執行並連線到您的終端(由於 -i-t 標誌),因此您可以使用鍵盤提供輸入,而 Docker 將輸出記錄到您的終端。

  6. 當您執行 exit 以終止 /bin/bash 命令時,容器會停止,但不會被刪除。您可以重新啟動它或刪除它。

底層技術

Docker是用Go程式語言編寫的,並利用Linux核心的幾個特性來實現其功能。Docker使用一項名為namespaces的技術來提供稱為容器的隔離工作區。執行容器時,Docker會為該容器建立一個名稱空間集。

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

下一步