相信對於許多人來說,開始使用容器往往是在進入職場之後的事。即便如此,許多工程師也只是跟著前輩的步伐,執行指令來建立容器,隨後便直接投入需求修改、程式碼調整等工作。至於「如何建立容器」或是「如何搭建本地環境」,大多數人可能並未深入了解。
事實上,對於初階工程師來說,這些細節的確並不那麼重要。畢竟大多數時候,初階工程師的角色集中在調整、維護現有功能,偶爾負責新增一些小功能。然而,隨著職位的升遷,高階工程師便需要負責系統升級、構建新系統、或進行系統重構等更大範圍的工作。此時,對容器的深刻理解便顯得至關重要,因為它是確保這些工作順利進行的基礎。
簡介容器
什麼是容器
容器是一種輕量級的軟體包,它包含了應用程式及其所有必要的依賴項,讓我們可以在任何環境中執行容器內的內容。簡單來說,容器可視為一個封閉的運行環境。此外,容器還具有隔離性。正如之前所提到的,容器內的內容可以在任何環境中執行,因此它與所在的環境無關,彼此完全隔離。這種隔離性保證了我們在不同環境中運行容器時,能夠得到一致的結果,也不會因為運行容器導致原有的環境受到汙染。
容器的組成
容器主要由以下三個部分所組成:
- 鏡像(Image):鏡像是容器的靜態文件,包含了應用程式的所有代碼、環境變數、配置文件等內容。鏡像是唯讀的(readonly),並可以基於相同的鏡像創建多個容器實例。一般來說,鏡像會基於某些操作系統(如Ubuntu、Alpine等)或平台(如PHP、Python等)。
- 容器(Container):容器是由鏡像創建的運行實體,擁有一個唯一的容器ID。容器可以啟動、停止、移動或刪除,並且它是鏡像在運行時的具體表現。
- 容器引擎:容器引擎是管理和執行容器所必須的軟體,例如 Docker,它負責容器的創建、運行和管理。
容器的優點
- 快速啟動:由於容器輕便且僅包含運行所需的基本內容,因此啟動速度比需要啟動整個操作系統的虛擬機要快許多。
- 一致性和可靠性:容器具有強隔離性,並且使用相同的鏡像創建容器。這樣不僅保證了開發、測試及生產環境的一致性,還能有效避免「明明在我機器上能運行」的問題。
- 高效的資源利用:容器不需要額外的操作系統,減少了硬體資源的浪費、提高資源利用率。
與容器相關的平台與技術
Docker
Docker 是提供實現容器技術的一種工具,使得開發者能夠更輕鬆地創建、管理和運行容器化應用。Docker 本身有一套工具集來支援容器化過程,並簡化了容器的建立、運行和部署。由於 Docker 擁有強大的社群和豐富的生態系統,因此大多數人也都更傾向使用 Docker 與其規範去建立容器。
K8S
Kubernetes(縮寫為 K8s)是一個開源的容器編排平台,用於自動化應用容器的部署、擴展和管理。Kubernetes 的主要特性和概念包含:
- 容器編排:Kubernetes 能夠自動處理容器的部署和調度,確保容器在集群中的分佈符合用戶需求,並能有效管理容器的生命周期。
- 服務發現和負載均衡:Kubernetes 透過 DNS 名稱或 IP 地址來暴露容器服務,並提供負載均衡功能,確保流量能夠均勻分佈,以提高系統的可用性與穩定性。
- 儲存編排:Kubernetes 支援自動掛載各種儲存系統,無論是本地儲存、雲端儲存(如 GCP、AWS)或是網路儲存系統(如 NFS、iSCSI、Gluster、Ceph、Cinder 等)。
- 自動擴展:根據 CPU 使用率或其他應用提供的指標,Kubernetes 可以自動擴展應用的資源,實現高效的資源利用與調度。
- 自我修復:Kubernetes 具有自我修復能力,當容器或節點出現故障時,它能夠自動重新啟動失敗的容器,並將其調度到健康的節點上。
- 秘密和配置管理:Kubernetes 可以儲存並管理敏感資料,如密碼、OAuth 令牌和 SSH 金鑰等,並能在不重建容器映像的情況下更新應用配置與密鑰。
簡而言之,Kubernetes 提供了一個強大且自動化的管理平台,用來協調和管理大量容器,從而簡化了容器化應用的部署與運營。
ArgoCD
ArgoCD 是一款開源的持續交付 (Continuous Delivery, CD) 工具,專門設計來簡化和自動化 Kubernetes 上的應用程式部署與管理。它是一個基於 GitOps 的解決方案,這意味著它將 Git 作為「單一真實來源」(Single Source of Truth),並通過自動化部署流程來確保 Kubernetes 叢集中的應用狀態與 Git 儲存庫中的配置保持一致。
此外,ArgoCD 能夠追蹤容器應用目前的狀態,確保與 Git 儲存庫中的配置一致。如果某個容器應用的配置被更改或者出現問題,ArgoCD 會自動回滾到先前的穩定版本,從而確保容器應用始終處於健康狀態。
簡單來說,ArgoCD 就是以 GItOps 與 Kubernetes 這兩點為主要特色的工具。
AWS CodeDeploy
AWS CodeDeploy 是一個全託管的部署服務,可用於將應用程式部署到各種環境中,包括容器化應用,如 Amazon ECS 或 Amazon EKS。它還提供容器版本控制,方便執行滾動更新(Rolling Updates)與回滾(Rollback),使應用程式的部署與維護變得更加高效與可靠。
簡而言之,AWS CodeDeploy 提供了一個自動化部署容器的平台,簡化了應用程式的版本管理與更新過程。