對于像容器這類平臺級別的技術,通常涉及的知識范圍會很廣,相關的軟件,解決方案也會很多,初學者往往容易迷失。
那怎么辦呢?
我們可以從生活經驗中尋找答案。
當我們去陌生城市旅游想了解一下這個城市一般我們會怎么做?
我想大部分人應該會打開手機看一下這個城市的地圖:
-
城市大概的位置和地理形狀是什么?
-
都由哪幾個區或縣組成?
-
主要的交通干道是哪幾條?
同樣的道理,學習容器技術我們可以先從天上鳥瞰一下:
-
容器生態系統包含哪些不同層次的技術?
-
不同技術之間是什么關系?
-
哪些是核心技術哪些是輔助技術?
首先得對容器技術有個整體認識,之后我們的學習才能夠有的放矢,才能夠分清輕重緩急,做到心中有數,這樣就不容易迷失了。
接下來我會根據自己的經驗幫大家規劃一條學習路線,一起探索容器生態系統。
學習新技術得到及時反饋是非常重要的,所以我們馬上會搭建實驗環境,并運行第一個容器,感受什么是容器。
千里之行始于足下,讓我們從了解生態系統開始吧。
鳥瞰容器生態系統
一談到容器,大家都會想到 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。
容器定義工具
容器定義工具允許用戶定義容器的內容和屬性,這樣容器就能夠被保存,共享和重建。
docker image 是 docker 容器的模板,runtime 依據 docker image 創建容器。
dockerfile 是包含若干命令的文本文件,可以通過這些命令創建出 docker image。
ACI (App Container Image) 與 docker image 類似,只不過它是由 CoreOS 開發的 rkt 容器的 image 格式。
Registry
容器是通過 image 創建的,需要有一個倉庫來統一存放 image,這個倉庫就叫做 Registry。
企業可以用 Docker Registry 構建私有的 Registry。
Docker Hub(https://hub.docker.com )是 Docker 為公眾提供的托管 Registry,上面有很多現成的 image,為 Docker 用戶提供了極大的便利。
Quay.io(https://quay.io/ )是另一個公共托管 Registry,提供與 Docker Hub 類似的服務。
容器 OS
由于有容器 runtime,幾乎所有的 Linux、MAC OS 和 Windows 都可以運行容器。但這不并沒有妨礙容器 OS 的問世。
容器 OS 是專門運行容器的操作系統。與常規 OS 相比,容器 OS 通常體積更小,啟動更快。因為是為容器定制的 OS,通常它們運行容器的效率會更高。
目前已經存在不少容器 OS,CoreOS、atomic 和 ubuntu core 是其中的杰出代表。
下一節繼續介紹容器平臺技術和容器支持技術。
文章列表