雲端在軟體市場的占比在2020已經達到了30%以上,並且將來只會越來越高。
近幾年,矽谷的各個科技大廠都快速的融入 Cloud Native 原生雲 的概念。就連新興 Startups 創業 公司的軟體開發也都是直接基於 Cloud Native 概念開始的。這代表著現代的工程師想要具有競爭力,無論工作是 Frontend、Backend、又或是 Operations,對 Cloud 雲端 相關內容有著基本的了解都會是大大的加分。而在 Cloud Native 的世界中,Container 容器 則扮演著至關重要的基本角色。
Cloud Native 的生態環境非常廣闊,不妨看看這個 CNCF 的生態圖看看自己知道幾個又或是看過幾個。
實體機 | 虛擬機 | 容器 | |
---|---|---|---|
啟動速度 | 慢 | 數分鐘 | 數秒 |
硬碟容量 | 幾GB | 幾GB | 幾MB |
效能 | 快 | 慢 | 接近傳統 |
系統支援量 | 極少量 | 一般幾十個 | 上千個容器 |
簡易的示意圖
OCI 是容器開放標準。OCI 當前包含兩個規範:運行時規範(runtime-spec)和映像規範(image-spec)。Runtime-spec 規範定義瞭如何將 OCI Image 捆綁包作為 Container 運行。Image-spec 規範定義瞭如何創建 OCI Image,該 Image 包括 Image Manifest,文件系統(Layers)序列化和 Image Configuration。
CRI 容器運行時接口用於實現 OCI 的標準。一般被分為 High & Low Level 兩種 Runtime。
最常見的 low-level runtime 有 docker 的開源項目 moby 所有的 runC。OCI runtime 是屬於 low-level 的 runtime,其功能主要用於創建和刪除 container。
較為常見 CRI runtime的有由 docker 衍生除來的 containerd 和紅帽為了 Kubernetes 所開發的 CRI-O。其功能包括 Container 生命週期管理、資源管理等等。
說到 Container 最常被提及的就是 Docker 了。Docker 是 2013 年 DotCloud 公司的開源專案,公司在項目成功之後改名為 Docker Inc。簡而言之 Docker 已經算是 Container 的代名詞了,所以這篇文章的多數內容將會以 Docker 帶入 Container 的相關話題。
Docker 架構簡圖
Docker 體系結構包含 五個主要組件:
Dockerfile 是一個用來構建鏡像的文件,內容包含了一條條構建 Docker Image 所需的指令和說明。用於創建 Docker Image 所編寫的一組指令構建。
Docker 是一個能夠全套管理 Container 的工具,其中最常使用的功能包括:
Docker 並不屬於 OCI 或 CRI,但 Docker 的使用包括 Containerd (CRI) 和 runC (OCI)。像 Docker 這樣的全套 Container 管理軟體被稱作 Container Engine,而 Docker Inc 公司也將其商品稱為 Docker Engine。
Docker Engine 簡單示意圖
Docker 使用 Client-Server 架構。Docker Client 端與 Docker Daemon 進程進行溝通,Docker Daemon 用於構建、運行和分發 Docker Container。Docker Client 和 Docker Daemon 使用 REST API,通過 UNIX Socket 或網絡接口進行通信。
Docker Engine中包含三個組件 :
雖說 Docker 幾乎已經是 Container 的代名詞了,但除了 Docker 以外還有許多 Container 工具。可以參考 Container Tool Project 中像是 buildah + skopeo + podman 額外再加上 cri-o 就幾乎完全取代了 Docker 了所有功能了。
Container 是現代軟體的趨勢,而在 Container 之上還有像是 Kubernetes、Docker-Swarm、Mesos 這些 Container Orchestration Tool 用於自動化管理 Container 的平台。目前發展最為迅速及成熟的無非就是 Kubernetes 了,可以參考我另一篇文章 Kubernetes 基本介紹 來入門。