1.1.1 容器歷史
雖然 docker 把容器技術推向了巔峰,但容器技術卻不是從 docker 誕生的。實際上,容器技術連新技術都算不上,因為它的誕生和使用確實有些年頭了。下面的一串名稱肯能有的你都沒有聽說過,但它們的確都是容器技術的應用:
1、Chroot Jail
就是我們常見的 chroot 命令的用法。它在 1979 年的時候就出現了,被認為是最早的容器化技術之一。它可以把一個進程的文件系統隔離起來。
2、The FreeBSD Jail
Freebsd Jail 實現了操作系統級別的虛擬化,它是操作系統級別虛擬化技術的先驅之一。
3、Linux VServer
使用添加到 Linux 內核的系統級別的虛擬化功能實現的專用虛擬服務器。
4、Solaris Containers
它也是操作系統級別的虛擬化技術,專為 X86 和 SPARC 系統設計。Solaris 容器是系統資源控制和通過 "區域" 提供邊界隔離的組合。
5、OpenVZ
OpenVZ 是一種 Linux 中操作系統級別的虛擬化技術。 它允許創建多個安全隔離的 Linux 容器,即 VPS。
6、Process Containers
Process 容器由 Google 的工程師開發,一般被稱為 cgroups。
7、LXC
LXC為Linux Container的簡寫??梢蕴峁┹p量級的虛擬化,以便隔離進程和資源,而且不需要提供指令解釋機制以及全虛擬化的其他復雜性。容器有效地將由單個操作系統管理的資源劃分到孤立的組中,以更好地在孤立的組之間平衡有沖突的資源使用需求
Linux Container提供了在單一可控主機節點上支持多個相互隔離的server container同時執行的機制。Linux Container有點像chroot,提供了一個擁有自己進程和網絡空間的虛擬環境,但又有別于虛擬機,因為lxc是一種操作系統層次上的資源的虛擬化。
8、Warden
在最初階段,Warden 使用 LXC 作為容器運行時。 如今已被 CloudFoundy 取代。
9、LMCTFY
LMCTY 是 Let me contain that for you 的縮寫。它是 Google 的容器技術棧的開源版本。
Google 的工程師一直在與 docker 的 libertainer 團隊合作,并將 libertainer 的核心概念進行抽象并移植到此項目中。該項目的進展不明,估計會被 libcontainer 取代。
10、Docker
Docker 是一個可以將應用程序及其依賴打包到幾乎可以在任何服務器上運行的容器的工具。
11、RKT
RKT 是 Rocket 的縮寫,它是一個專注于安全和開放標準的應用程序容器引擎。
正如我們所看到的,docker 并不是第一個容器化技術,但它的確是最知名的一個。
1.1.2 Docker 是什么
Docker (碼頭工人)是一個開源項目,誕生于 2013 年初,最初是 dotCloud 公司(后由于 Docker 開源后大受歡迎就將公司改名為 Docker Inc ,總部位于美國加州的舊金山)內部的一個開源的 PAAS 服務 (Platform as a ServiceService )的業余項目。它基于 Google 公司推出的 Go 語言實現。 項目后來加入了 Linux 基金會,遵從了 Apache 2.0 協議,項目代碼在 GitHub 上進行維護。
Docker 是基于 linux 內核實現,Docker 最早采用 LXC 技術 ,LXC 是 Linux 原生支持的容器技術 ,可以提供輕量級的虛擬化 ,可以說 docker 就是基于 LXC 發展起來 的,提供 LXC 的高級封裝,標準的配置方法,在LXC的基礎之上,docker提供了一系列更強大的功能。而虛擬化技術 KVM(KernelKernel-based Virtual Machine Machine) 基于 模塊實現, 后來Docker 改為自己研發并開源的 runc 技術運行容器,徹底拋棄了LXC。
Docker 相比虛擬機的交付速度更快,資源消耗更低,Docker 采用客戶端/服務端架構,使用遠程API來管理和創建容器,其可以輕松的創建一個輕量級的、可移植的、自給自足的容器,docker 的三大理念是build(構建)、ship(運輸)、 run(運行),Docker遵從apache 2.0協議,并通過(namespace及cgroup等)來提供容器的資源隔離與安全保障等,所以Docke容器在運行時不需要類似虛擬機(空運行的虛擬機占用物理機6-8%性能)的額外資源開銷,因此可以大幅提高資源利用率,總而言之Docker是一種用了新穎方式實現的輕量級虛擬機.類似于VM但是在原理和應用上和VM的差別還是很大的,并且docker的專業叫法是應用容器(Application Container)。
Docker的主要目標
Build, Ship and Run Any App, Anywhere,即通過對應用組件的封裝(Packaging)、分發(Distribution)、部署(Deployment)、運行(Runtime)等生命周期的管理,達到應用組件級別的“一次封裝,到處運行”。這里的應用組件,既可以是一個Web應用,也可以是一套數據庫服務,甚至是一個操作系統。將應用運行在Docker 容器上,可以實現跨平臺,跨服務器,只需一次配置準備好相關的應用環境,即可實現到處運行,保證研發和生產環境的一致性,解決了應用和運行環境的兼容性問題,從而極大提升了部署效率,減少故障的可能性
docker 官網:http://www.docker.com
幫助文檔鏈接:https://docs.docker.com/
docker 中文網站:http://www.docker.org.cn/
1.1.3 Docker 的組成
- Docker 主機(Host):一個物理機或虛擬機,用于運行Docker服務進程和容器,也稱為宿主機,node節點
- Docker 服務端(Server):Docker守護進程,運行docker容器
- Docker 客戶端(Client):客戶端使用docker 命令或其他工具調用docker API
- Docker 倉庫(Registry): 保存鏡像的倉庫,官方倉庫: https://hub.docker.com/,可以搭建私有倉庫harbor
- Docker 鏡像(Images):鏡像可以理解為創建實例使用的模板
- Docker 容器(Container): 容器是從鏡像生成對外提供服務的一個或一組服務
1.1.4 Docker 和虛擬機,物理主機
容器和虛擬機比較
- 資源利用率更高:一臺物理機可以運行數百個容器,但是一般只能運行數十個虛擬機
- 開銷更?。翰恍枰獑訂为毜奶摂M機OS內核占用硬件資源
- 啟動速度更快:可以在數秒內完成啟動
- 集成性更好:和CI/CD(持續集成/持續部署)相關技術結合性更好,實現自動化管理
使用虛擬機是為了更好的實現服務運行環境隔離,每個虛擬機都有獨立的內核,虛擬化可以實現不同操作系統的虛擬機,但是通常一個虛擬機只運行一個服務,很明顯資源利用率比較低且造成不必要的性能損耗,我們創建虛擬機的目的是為了運行應用程序,比如Nginx、PHP、Tomcat等web程序,使用虛擬機無疑帶來了一些不必要的資源開銷,但是容器技術則基于減少中間運行環節帶來較大的性能提升。
根據實驗,一個運行著CentOS的KVM虛擬機啟動后,在不做優化的情況下,虛擬機自己就需要占用100~200 MB內存。此外,用戶應用運行在虛擬機里面,它對宿主機操作系統的調用就不可避免地要經過虛擬化軟件的攔截和處理,這本身又是一層性能損耗,尤其對計算資源、網絡和磁盤I/O的損耗非常大。
比如:一臺96G內存的物理服務器,運行java程序的虛擬機一般分配8G內存/4核的資源,只能運行13臺左右虛擬機,但是改為運行docker容器每個容器分配4G內存,就可以運行25個左右容器,運行數量相當于提高一倍,可以大幅節省IT支出,通常情況下至少可以節約一半以上的物理設備
本文鏈接:http://www.thecarconnectin.com/34721.html
網友評論comments