1. 程式人生 > 實用技巧 >【Docker】Docker 概述

【Docker】Docker 概述

Docker 是一個用於開發,分發和執行應用程式的開放平臺。Docker 使您能夠將應用程式與基礎架構分開,從而可以快速交付軟體。藉助 Docker,您可以以與管理應用程式相同的方式來管理基礎架構。通過利用 Docker 的快速分發,測試和部署程式碼的方式,您可以大大減少編寫程式碼和在生產環境中執行程式碼之間的延遲。

Docker 平臺(Docker platform)

Docker 提供了在鬆散隔離的環境(稱為容器)中打包和執行應用程式的功能。隔離和安全性使您可以在給定主機上同時執行多個容器。容器很輕量級,因為它們不需要額外的虛擬程式,而是直接在主機的核心中執行。這意味著與使用虛擬機器相比,在給定的硬體組合上可以執行更多的容器。您甚至可以在虛擬機器的主機中執行 Docker 容器!

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

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

Docker 引擎(Docker Engine)

Docker Engine 是具有以下主要元件的 客戶端-伺服器 應用程式:

  • 伺服器是一種長期執行的程式,稱為守護程式程序(dockerd 命令)。
  • 使用 REST API 來與守護程式進行通訊並指示其操作的介面。
  • 命令列介面(CLI)客戶端(docker 命令)。

Docker 的組成圖如下:

命令列(CLI)使用 Docker 的 REST API 來命令與 Docker 守護程式控制或互動。守護程式可以建立和管理Docker物件,例如影象,容器,網路和卷。

注意:Docker 在 Apache 2.0 許可證下進行開源

我能用 Docker 做什麼

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

Docker 通過允許開發人員使用能提供應用和服務的標準本地環境,來簡化開發流程。容器非常適合持續整合和持續交付(CI/CD)工作流程。

考慮以下示例場景:

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

響應式部署和擴充套件

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

Docker 的可移植性和輕量級的特性還使您可以輕鬆地動態管理工作負載,並根據業務需求擴充套件或關閉應用程式和服務。

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

Docker 輕巧快速。它為基於虛擬機器管理程式的虛擬機器提供了可行,經濟高效的替代方案,因此您可以利用更多的計算能力來實現業務目標。Docker非 常適合高密度環境以及中小型部署,在這些部署中您需要用更少的資源做更多的事情。

Docker 架構(Docker Architecture)

Docker 使用客戶端-伺服器架構。Docker 客戶端與 Docker 守護程序進行互動,該守護程式完成構建,執行和分發 Docker 容器的繁重工作。 Docker 客戶端和守護程序可以在同一系統上執行,或者您可以將 Docker 客戶端連線到遠端 Docker 守護程序。 Docker 客戶端和守護程序在 UNIX 套接字或網路介面上使用 REST API 進行通訊。

Docker 守護程序(Docker daemon)

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

Docker 客戶端(Docker client)

Docker 客戶端(docker)是許多 Docker 使用者與 Docker 互動的主要方式。當您使用諸如 docker run 之類的命令時,客戶端會將這些命令傳送至 dockerd,然後執行它們。Docker 命令使用 Docker API。Docker 客戶端可以與多個守護程式通訊。

Docker 倉庫(Docker registries)

Docker registry 儲存 Docker 映象。Docker Hub 是任何人都可以使用的公共 Registry,並且 Docker 配置為預設在 Docker Hub 上查詢映象。您甚至可以執行自己的私有 Registry。

使用 docker pulldocker run 命令時,所需的映象將從配置的 Registry 中提取。使用 docker push 命令時,會將映象推送到配置的 Registry。

Docker 物件(Docker objects)

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

映象(IMAGES)

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

您可以建立自己的映象,也可以使用其他人建立並在 Registry 中釋出的映象。要構建自己的映象,您可以使用簡單的語法建立一個 Dockerfile,以定義建立映象並執行它所需的步驟。Dockerfile 中的每條指令都會在映象中建立一個層。當您更改 Dockerfile 並重建映象時,僅重建那些已更改的層。與其他虛擬化技術相比,這是使映象如此輕巧,小型和快速的部分原因。

容器(CONTAINERS)

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

預設情況下,容器與其他容器及其主機之間的隔離度相對較高。您可以控制容器的網路,儲存或其他基礎子系統與其他容器或與主機的隔離程度。

容器由其映象以及在建立或啟動時為其提供的任何配置選項定義。刪除容器後,未儲存在永久性儲存中的狀態更改將消失。

服務(SERVICES)

服務使您可以在多個 Docker 守護程式之間擴充套件容器,這些守護程式都可以與多個管理者和工作人員一起工作。 每個成員都是 Docker 守護程式,所有守護程式都使用 Docker API 進行通訊。服務允許您定義所需的狀態,例如在任何給定時間必須可用的服務副本的數量。預設情況下,該服務在所有工作節點之間是負載平衡的。對於消費者而言,Docker 服務似乎是一個單獨的應用程式。 Docker Engine 在 Docker 1.12 及更高版本中支援叢集模式。