Docker 和容器技術(shù)的發(fā)展可謂是日新月異,,本文試圖以全局的視角來梳理一下 docker 目前的生態(tài)圈。既然是概覽,所以不會涉及具體的技術(shù)細節(jié),。 Docker 自從發(fā)布以來發(fā)生了很多的變化,,并且有些方面的變化還非常大。對于技術(shù)愛好者來說,,我們喜歡酷斃新的功能,,喜歡舊功能的改善。但對于生產(chǎn)環(huán)境中的使用者來說,,其實不太喜歡這種頻繁的變化,!不管怎樣,我們都有必要理清 docker 生態(tài)系統(tǒng)中的眾多概念及它們之間的關(guān)系,,以及 docker 自誕生至今(2018 年)的里程碑性事件,。 雖然 docker 把容器技術(shù)推向了巔峰,但容器技術(shù)卻不是從 docker 誕生的,。實際上,,容器技術(shù)連新技術(shù)都算不上,因為它的誕生和使用確實有些年頭了,。下面的一串名稱肯能有的你都沒有聽說過,,但它們的確都是容器技術(shù)的應(yīng)用:
就是我們常見的 chroot 命令的用法。它在 1979 年的時候就出現(xiàn)了,,被認為是最早的容器化技術(shù)之一,。它可以把一個進程的文件系統(tǒng)隔離起來。 Freebsd Jail 實現(xiàn)了操作系統(tǒng)級別的虛擬化,,它是操作系統(tǒng)級別虛擬化技術(shù)的先驅(qū)之一,。 使用添加到 Linux 內(nèi)核的系統(tǒng)級別的虛擬化功能實現(xiàn)的專用虛擬服務(wù)器。 它也是操作系統(tǒng)級別的虛擬化技術(shù),,專為 X86 和 SPARC 系統(tǒng)設(shè)計,。Solaris 容器是系統(tǒng)資源控制和通過 '區(qū)域' 提供邊界隔離的組合。 OpenVZ 是一種 Linux 中操作系統(tǒng)級別的虛擬化技術(shù),。 它允許創(chuàng)建多個安全隔離的 Linux 容器,,即 VPS。 Process 容器由 Google 的工程師開發(fā),,一般被稱為 cgroups,。 LXC 又叫 Linux 容器,這也是一種操作系統(tǒng)級別的虛擬化技術(shù),,允許使用單個 Linux 內(nèi)核在宿主機上運行多個獨立的系統(tǒng),。 在最初階段,Warden 使用 LXC 作為容器運行時,。 如今已被 CloudFoundy 取代,。 LMCTY 是 Let me contain that for you 的縮寫,。它是 Google 的容器技術(shù)棧的開源版本。Google 的工程師一直在與 docker 的 libertainer 團隊合作,,并將 libertainer 的核心概念進行抽象并移植到此項目中,。該項目的進展不明,估計會被 libcontainer 取代,。 Docker 是一個可以將應(yīng)用程序及其依賴打包到幾乎可以在任何服務(wù)器上運行的容器的工具。 RKT 是 Rocket 的縮寫,,它是一個專注于安全和開放標(biāo)準(zhǔn)的應(yīng)用程序容器引擎,。 正如我們所看到的,docker 并不是第一個容器化技術(shù),,但它的確是最知名的一個,。Docker 誕生于 2013 年,并獲得了快速的發(fā)展,,下圖展示了當(dāng)前 docker 平臺中的組成部分(此圖來自互聯(lián)網(wǎng)): Docker 立于系統(tǒng)基礎(chǔ)架構(gòu)之上并為應(yīng)用程序提供支撐,。它由稱為 containerd 的行業(yè)標(biāo)準(zhǔn)容器運行時組件,稱為 docker swarm 的本地編排工具,,以及開源的 docker community 版本和提供商業(yè)管理服務(wù)的 docker enterprise 版組成,。 Docker 的第一個執(zhí)行環(huán)境是 LXC,但從版本 0.9 開始 LXC 被 libcontainer 取代,。 Libcontainer 為 docker 封裝了 Linux 提供的基礎(chǔ)功能,,如 cgroups,namespaces,,netlink 和 netfilter 等,,如下圖所示(此圖來自互聯(lián)網(wǎng)): 2015 年,docker 發(fā)布了 runC,,一個輕量級的跨平臺的容器運行時,。 這基本上就是一個命令行小工具,可以直接利用 libcontainer 運行容器,,而無需通過 docker engine,。runC 的目標(biāo)是使標(biāo)準(zhǔn)容器在任何地方都可用。 OCI 是一個輕量級的開放式管理架構(gòu),,由 docker,,CoreOS 和容器行業(yè)的其他領(lǐng)導(dǎo)廠商于 2015 年建立。它維護一些項目,,如 runC ,,還有容器運行時規(guī)范和鏡像規(guī)范。OCI 的目的是圍繞容器行業(yè)制定標(biāo)準(zhǔn),,比如使用 docker 創(chuàng)建的容器可以在任何其他容器引擎上運行,。 2016年,,Docker 分拆了 containerd,并將其捐贈給了社區(qū),。將這個組件分解為一個單獨的項目,,使得 docker 將容器的管理功能移出 docker 的核心引擎并移入一個單獨的守護進程(即 containerd)。 分拆完 containerd 后,,docker 各組件的關(guān)系如下圖所示(此圖來自互聯(lián)網(wǎng)): 至此,,docker 從一個單一的軟件演變成了一套相互獨立的組件和項目。 Docker 如何運行一個容器,?
該模型帶來的最大好處是在升級 docker 引擎時不會中斷容器的運行,。 2017 年是容器成為主流技術(shù)的一年,這就是為什么 docker 在 Linux 之外支持眾多平臺的原因(Docker for Mac,,Docker for Windows,,Docker for AWS,GCP 等),。 當(dāng)容器技術(shù)被大眾接受后,,Docker 公司意識到需要新的生產(chǎn)模型,這就是為什么它開始 Moby 項目,。 Moby 項目開啟了實現(xiàn)協(xié)作和生產(chǎn)的新篇章,。它是一個開源項目,旨在推進軟件的容器化,。Moby 項目提供了數(shù)十個樂高積木一樣的組件以及將它們組裝成定制的基于容器的系統(tǒng)的框架,。 Docker 生產(chǎn)模型像任何其他常見的單個開源項目一樣開始(此圖來自互聯(lián)網(wǎng)): 進而將單個項目拆分為不同的開放組件(此圖來自互聯(lián)網(wǎng)): 然后進化到可以共享這些組件以及組件集合(assembly)的模型(此圖來自互聯(lián)網(wǎng)): |
|
來自: 太極混元天尊 > 《學(xué)習(xí)資料》