什麼是 Docker?

已完成

開始快速導覽 Docker 容器之前,讓我們看一下小組如何開發和部署應用程式。 我們也將簡短描述一些小組面臨的挑戰。

在公司中開發和管理應用程式的過程通常會包含一或多個小組。 有建立軟體的開發小組,以及負責部署這些應用程式的作業小組。 作業小組也負責管理應用程式裝載基礎結構。

例如,假設我們正在開發訂單追蹤入口網站,以供公司的各個暢貨中心使用。 在應用程式的開發和發佈過程中,有數個環境會裝載我們的應用程式。 首先,開發小組在開發環境中開發和測試軟體。 然後,從這裡將軟體部署到品質保證 (QA) 環境,緊接著進入生產階段前,最終進入實際執行環境。

在上述案例中,我們需要考慮下列數個挑戰:

  • 管理裝載環境

    各種環境都需要軟體和硬體管理。 我們必須確保每個已安裝的軟體和已設定的硬體都一樣。 我們也需要以一致且容易重現的方式,來設定每個環境的網路存取、資料儲存體和安全性等層面。

  • 持續交付軟體

    將應用程式部署到環境的方式必須始終如一。 每個部署套件都必須包含所有可確保應用程式功能完整的系統套件、二進位檔、程式庫、設定檔及其他項目。 我們也需要確定所有這些相依性都符合軟體版本和架構。

  • 有效率的硬體使用

    每個部署的應用程式都必須以與在相同硬體上執行的其他應用程式隔離的方式來執行。 我們的目標是在每部伺服器上執行多個應用程式,以充分利用資源,而不會彼此影響。

  • 應用程式可攜性

    應用程式可攜性很重要的原因有好幾個。 裝載環境可能失敗,或者,我們可能需要相應放大應用程式。 在這兩種情況下,可能的結果就是將軟體重新部署到新環境。 我們想要將軟體從一部主機移到另一部,即使基礎結構不同也一樣。 這類移動必須儘快進行,以減少客戶的停機時間。

在探討協助解決這些挑戰的 Docker 功能之前,我們將討論一些概念,並查看 Docker 架構的簡短概觀。

什麼是容器?

容器是一個未完全隔離的環境,可讓我們建置並執行軟體套件。 這些軟體套件包含程式碼和所有相依性,可讓您在任何運算環境中快速且可靠地執行應用程式。 我們將這些套件稱為「容器映像」

容器映像成為我們用來散發應用程式的單位。

什麼是軟體容器化?

軟體容器化是一種 OS 虛擬化方法,可用來部署及執行容器,而不需使用虛擬機 (VM)。 容器可以在實體硬體上、在雲端和 VM 中,以及跨多個作業系統執行。

什麼是 Docker?

Docker 是用來開發、交付及執行容器的容器化平台。 Docker 不會使用 Hypervisor,如果您要開發與測試應用程式,則可在桌上型電腦或膝上型電腦上執行 Docker。 桌面版的 Docker 支援 Linux、Windows 和 macOS。 針對實際執行系統,Docker 可用於伺服器環境,包括許多 Linux 發行版本以及 Microsoft Windows Server 2016 和更新版本。 許多雲端 (包括 Azure) 都支援 Docker。

Docker 架構

Docker 平台會由數個元件所組成,讓我們可用來建置、執行和管理容器化應用程式。

Docker 引擎

Docker 引擎會由數個設定為用戶端-伺服器實作的元件所組成,其中用戶端和伺服器會在相同主機上同時執行。 用戶端能使用 REST API 來與伺服器通訊,如此一來,這個用戶端即能與遠端伺服器執行個體進行通訊。

Diagram showing a high-level overview of the Docker architecture.

有些箭號會顯示 Docker 伺服器、執行中容器與預存容器映像之間的通訊。 這些箭號代表 Docker 伺服器如何載入預存容器映像,以及管理執行中的容器。

Docker 用戶端

Docker 用戶端有兩種替代方案:名為 docker 的命令列應用程式,或名為 Docker Desktop,以圖形化使用者介面 (GUI) 為基礎的應用程式。 CLI 和 Docker Desktop 都會與 Docker 伺服器互動。 來自 CLI 和 Docker Desktop 的 docker 命令使用 Docker REST API,將指示傳送到本機或遠端伺服器,以及作為我們用來管理容器的主要介面。

Docker 伺服器

Docker 伺服器是名為 dockerd 的精靈。 dockerd 精靈會透過 Docker REST API 來回應用戶端的要求,並可與其他精靈互動。 Docker 伺服器也負責追蹤容器的生命週期。

Docker 物件

您將建立並設定數個物件來支援容器部署。 這些物件包括網路、存放磁碟區、外掛程式及其他服務物件。 我們將不會在此處涵蓋所有這些物件,但請記住,這些物件都是我們可以視需要建立和部署的項目。

Docker Hub (英文)

Docker Hub 是軟體即服務 (SaaS) Docker 容器登錄。 Docker 登錄是我們用來儲存和散發所建立之容器映像的存放庫。 Docker Hub 是 Docker 用來管理映像的預設公用登錄。

請記住,您可以建立並使用私人 Docker 登錄,或使用眾多可用的雲端提供者選項之一。 例如,您可以使用 Azure Container Registry 來儲存容器映像,以用於幾個已啟用 Azure 容器的服務中。