鳥瞰容器生態系統
一談到容器,大家都會想到 Docker。
Docker 現在幾乎是容器的代名詞。確實,是 Docker 將容器技術發揚光大。同時,大家也需要知道圍繞 Docker 還有一個生態系統。Docker 是這個生態系統的基石,但完善的生態系統纔是保障 Docker 以及容器技術能夠真正健康發展的決定因素。
大致來看,容器生態系統包含核心技術、平臺技術和支持技術。
容器核心技術
容器核心技術是指能夠讓 container 在 host 上運行起來的那些技術。
這些技術包括容器規範、容器 runtime、容器管理工具、容器定義工具、Registry 以及 容器 OS,下面分別介紹。
容器規範
容器不光是 Docker,還有其他容器,比如 CoreOS 的 rkt。爲了保證容器生態的健康發展,保證不同容器之間能夠兼容,包含 Docker、CoreOS、Google在內的若干公司共同成立了一個叫 Open Container Initiative(OCI) 的組織,其目是制定開放的容器規範。
目前 OCI 發佈了兩個規範:runtime spec 和 image format spec。有了這兩個規範,不同組織和廠商開發的容器能夠在不同的 runtime 上運行。這樣就保證了容器的可移植性和互操作性。
容器 runtime
runtime 是容器真正運行的地方。runtime 需要跟操作系統 kernel 緊密協作,爲容器提供運行環境。
如果大家用過 Java,可以這樣來理解 runtime 與容器的關係:Java 程序就好比是容器,JVM 則好比是 runtime。JVM 爲 Java 程序提供運行環境。同樣的道理,容器只有在 runtime 中才能運行。
lxc、runc 和 rkt 是目前主流的三種容器 runtime。
lxc 是 Linux 上老牌的容器 runtime。Docker 最初也是用 lxc 作爲 runtime。
runc 是 Docker 自己開發的容器 runtime,符合 oci 規範,也是現在 Docker 的默認 runtime。
rkt 是 CoreOS 開發的容器 runtime,符合 oci 規範,因而能夠運行 Docker 的容器。
容器管理工具
光有 runtime 還不夠,用戶得有工具來管理容器啊。容器管理工具對內與 runtime 交互,對外爲用戶提供 interface,比如 CLI。這就好比除了 JVM,還得提供 java
命令讓用戶能夠啓停應用不是。
lxd 是 lxc 對應的管理工具。
runc 的管理工具是 docker engine。docker engine 包含後臺 deamon 和 cli 兩個部分。我們通常提到 Docker,一般就是指的 docker engine。
rkt 的管理工具是 rkt cli。