使用 Docker 容器的時機

已完成

如我們所了解,Docker 有數個功能可供我們使用。 此處將探討 Docker 可為開發和作業小組提供的優點。 我們也將探討數個 Docker 可能不是最佳選擇的案例。

這些層面將協助您決定 Docker 是否非常適合您的容器化策略。

回想一下,小組在開發和發佈訂單追蹤入口網站時面臨很多挑戰。 他們正在尋找適用於下列情況的解決方案:

  • 輕鬆管理我們的裝載環境。
  • 保證我們交付軟體的持續性。
  • 確保我們會有效地使用伺服器硬體。
  • 提供應用程式的可攜性。

Docker 即為這些挑戰的解決方案之一。 讓我們來看一下到目前為止提及的所有優點。

Docker 優點

當我們使用 Docker 時,可立即存取容器化所提供的優點。

有效率的硬體使用

容器不需使用虛擬機器 (VM) 即可執行。 如我們所了解,容器會仰賴主機核心來進行像是檔案系統、網路管理、處理排程及記憶體管理等功能。

Diagram contrasting VM resource use versus Docker resource use.

相較於 VM,我們看到 VM 需要安裝 OS,才可為於 VM 內部執行的應用程式提供核心功能。 請記住,VM OS 也需要磁碟空間、記憶體和 CPU 時間。 藉由移除 VM 和額外的 OS 需求,我們就能釋放主機上的資源,並使用它來執行其他容器。

容器隔離

Docker 容器提供安全性功能,以在相同主機上同時執行多個容器,而不會彼此影響。 誠如所見,我們可以設定資料儲存體和網路設定來隔離容器,或在特定容器之間共用資料和連線。

讓我們將此功能與使用 VM 進行比較。

Diagram that shows a physical host running multiple VMs.

假設我們的實體主機會執行兩部 VM。 我們有三個想要彼此獨立執行的應用程式。 我們決定將第一個應用程式部署到 VM1,並將第二個部署到 VM2,以便讓這兩個應用程式彼此分開。 如果我們現在選擇安裝第三個應用程式,就必須安裝另一部 VM 才能繼續此模式。

應用程式可攜性

容器幾乎可在所有位置執行: 桌上型電腦、實體伺服器、VM 和雲端。 此執行階段相容性可讓您輕鬆地在不同環境之間移動容器化應用程式。

由於容器是輕量型,因此不會受到緩慢啟動或關機時間所影響,例如 VM。 這會讓進行重新部署和其他部署案例 (例如相應增加或減少) 順暢且快速。

應用程式交付

透過 Docker,容器成為我們用來散發應用程式的單位。 這概念會確保開發人員和作業小組都會使用標準化的容器格式。 開發人員可專注於開發軟體,而作業小組則可專注於部署和管理軟體。

當開發小組發行應用程式的組建之後,我們就可以在部署系統的每個步驟中使用此容器。 容器是持續整合的理想候選項目,可加速從建置到實際執行的時間。

管理裝載環境

我們會在內部將應用程式的環境設定為容器。 這個內含項目可為作業小組提供彈性,讓他們能夠更緊密地管理應用程式的環境。 小組可以監視 OS 更新,一次套用安全性修補程式,並視需要推出已更新的容器。

小組也可以管理要安裝、更新和移除的應用程式,而不會影響其他容器。 每個容器都會隔離,而其資源限制會與其他容器分開指派。

雲端部署

Docker 容器是 Azure 容器化服務中所使用的預設容器架構,而且許多其他雲端平台都提供支援。

例如,您可以將 Docker 容器部署到 Azure 容器執行個體、Azure App Service 和 Azure Kubernetes Service。 這其中每個選項都為您提供不同的特性和功能。

例如,Azure 容器執行個體可讓您專注於設計和建置應用程式,而不會產生管理基礎結構的額外負荷。 此外,當您有許多要協調的容器時,Azure Kubernetes Service 可讓您輕鬆地部署和管理大規模的容器部署。

不使用 Docker 容器的時機

Docker 容器提供許多優點,但請記住,容器可能不符合您的所有需求。 有幾個層面要牢記在心。

安全性與虛擬化

容器提供一種隔離層級。 不過,容器會共用單一主機 OS 核心,這可能是單一攻擊點。

Windows 主機提供額外的隔離模型,其用途建置的 VM 可用來在 Hypervisor 層級隔離容器。 此模式稱為 Hyper-V 隔離模式,並在容器和容器主機之間新增另一層安全性。

我們也需要考慮帳戶層面 (例如儲存體和網路),以確保會將所有安全性層面納入考量。 例如,所有容器預設都將使用橋接器網路,並可透過 IP 位址彼此存取。

並非所有應用程式都能透過容器化而受益。 在這類情況下,使用 VM 可能更有意義。

服務監視

比起傳統的 VM 部署,管理應用程式和容器更複雜。 雖然有記錄功能可告訴我們執行中容器的狀態,但容器內服務的詳細資訊較難監視。

例如,Docker 為我們提供 docker stats 命令。 此命令會傳回容器的資訊,例如,CPU 使用量百分比、記憶體使用量百分比、寫入至磁碟的 I/O、已傳送和接收的網路資料,以及指派的處理序識別碼。 此資訊可用來作為即時資料流,但由於未儲存資料,不會進行彙總。 我們必須安裝協力廠商軟體,才能擷取一段時間內有意義的資料。