- Docker技術(shù)入門與實(shí)戰(zhàn)(第3版)
- 楊保華 戴王劍 曹亞侖
- 1881字
- 2018-11-08 18:34:02
1.1 什么是Docker
1. Docker開源項(xiàng)目背景
Docker是基于Go語言實(shí)現(xiàn)的開源容器項(xiàng)目。它誕生于2013年年初,最初發(fā)起者是dotCloud公司。Docker自開源后受到業(yè)界廣泛的關(guān)注和參與,目前已有80多個相關(guān)開源組件項(xiàng)目(包括Containerd、Moby、Swarm等),逐漸形成了圍繞Docker容器的完整的生態(tài)體系。
dotCloud公司也隨之快速發(fā)展壯大,在2013年年底直接改名為Docker Inc,并專注于Docker相關(guān)技術(shù)和產(chǎn)品的開發(fā),目前已經(jīng)成為全球最大的Docker容器服務(wù)提供商。官方網(wǎng)站為docker.com,如圖1-1所示。

圖1-1 Docker官方網(wǎng)站
Docker項(xiàng)目已加入Linux基金會,并遵循Apache 2.0協(xié)議,全部開源代碼均在https://github.com/docker項(xiàng)目倉庫進(jìn)行維護(hù)。在Linux基金會最近一次關(guān)于“最受歡迎的云計(jì)算開源項(xiàng)目”的調(diào)查中,Docker僅次于2010年發(fā)起的OpenStack項(xiàng)目,并仍處于上升趨勢。2014年,Docker鏡像下載數(shù)達(dá)到了一百萬次,2015年直接突破十億次,2017年更是突破了驚人的百億次。
現(xiàn)在主流的操作系統(tǒng)包括Linux各大發(fā)行版、macOS、Windows等都已經(jīng)支持Docker。例如,Redhat RHEL 6.5/CentOS 6.5、Ubuntu 16.04以及更新的版本,都已經(jīng)在官方軟件源中默認(rèn)帶有Docker軟件包。此外,各大云服務(wù)提供商也紛紛推出了基于Docker的服務(wù)。Google公司在其Platform as a Service(PaaS)平臺及服務(wù)中廣泛應(yīng)用了Docker容器;IBM公司與Docker公司達(dá)成了戰(zhàn)略合作伙伴關(guān)系,進(jìn)行云業(yè)務(wù)上的深入技術(shù)合作;Microsoft公司在其Azure云平臺上支持安全可擴(kuò)展的Docker集群方案;公有云提供商Amazon在其AWS云平臺上集成了對Docker的支持,提供高性能快速的部署。
Docker的構(gòu)想是要實(shí)現(xiàn)“Build, Ship and Run Any App, Anywhere”,即通過對應(yīng)用的封裝(Packaging)、分發(fā)(Distribution)、部署(Deployment)、運(yùn)行(Runtime)生命周期進(jìn)行管理,達(dá)到應(yīng)用組件級別的“一次封裝,到處運(yùn)行”。這里的應(yīng)用組件,既可以是一個Web應(yīng)用、一個編譯環(huán)境,也可以是一套數(shù)據(jù)庫平臺服務(wù),甚至是一個操作系統(tǒng)或集群。
基于Linux平臺上的多項(xiàng)開源技術(shù),Docker提供了高效、敏捷和輕量級的容器方案,并支持部署到本地環(huán)境和多種主流云平臺。可以說,Docker首次為應(yīng)用的開發(fā)、運(yùn)行和部署提供了“一站式”的實(shí)用解決方案。
2. Linux容器技術(shù)——巨人的肩膀
與大部分新興技術(shù)的誕生一樣,Docker也并非“從石頭縫里蹦出來的”,而是站在前人的肩膀上。其中最重要的就是Linux容器(Linux Containers, LXC)技術(shù)。IBM DeveloperWorks網(wǎng)站關(guān)于容器技術(shù)的描述十分準(zhǔn)確:“容器有效地將由單個操作系統(tǒng)管理的資源劃分到孤立的組中,以更好地在孤立的組之間平衡有沖突的資源使用需求。與虛擬化相比,這樣既不需要指令級模擬,也不需要即時編譯。容器可以在核心CPU本地運(yùn)行指令,而不需要任何專門的解釋機(jī)制。此外,也避免了準(zhǔn)虛擬化(para-virtualization)和系統(tǒng)調(diào)用替換中的復(fù)雜性。”
當(dāng)然,LXC也經(jīng)歷了長期的演化。最早的容器技術(shù)可以追溯到1982年Unix系列操作系統(tǒng)上的chroot工具(直到今天,主流的Unix、Linux操作系統(tǒng)仍然支持和帶有該工具)。早期的容器實(shí)現(xiàn)技術(shù)包括Sun Solaris操作系統(tǒng)上的Solaris Containers(2004年發(fā)布), FreeBSD操作系統(tǒng)上的FreeBSD jail(2000年左右發(fā)布),以及GNU/Linux上的Linux-VServer(http://linux-vserver.org,2001年10月)和OpenVZ(http://openvz.org,2005年)。
在LXC之前,這些相關(guān)技術(shù)經(jīng)過多年的演化已經(jīng)十分成熟和穩(wěn)定,但是由于種種原因,它們并沒有被很好地集成到主流的Linux內(nèi)核中,使用起來并不方便。例如,如果用戶要使用OpenVZ技術(shù),需要先手動給操作系統(tǒng)打上特定的內(nèi)核補(bǔ)丁方可使用,而且不同版本并不一致。類似的困難造成在很長一段時間內(nèi)這些優(yōu)秀的技術(shù)只在技術(shù)人員的小圈子中交流。
后來LXC項(xiàng)目借鑒了前人成熟的容器設(shè)計(jì)理念,并基于一系列新引入的內(nèi)核特性,實(shí)現(xiàn)了更具擴(kuò)展性的虛擬化容器方案。更加關(guān)鍵的是,LXC終于被集成到到主流Linux內(nèi)核中,進(jìn)而成為Linux系統(tǒng)輕量級容器技術(shù)的事實(shí)標(biāo)準(zhǔn)。從技術(shù)層面來看,LXC已經(jīng)趟過了絕大部分的“坑”,完成了容器技術(shù)實(shí)用化的大半歷程。
3.從Linux容器到Docker
在LXC的基礎(chǔ)上,Docker進(jìn)一步優(yōu)化了容器的使用體驗(yàn),讓它進(jìn)入尋常百姓家。首先,Docker提供了各種容器管理工具(如分發(fā)、版本、移植等),讓用戶無須關(guān)注底層的操作,更加簡單明了地管理和使用容器;其次,Docker通過引入分層文件系統(tǒng)構(gòu)建和高效的鏡像機(jī)制,降低了遷移難度,極大地改善了用戶體驗(yàn)。用戶操作Docker容器就像操作應(yīng)用自身一樣簡單。
早期的Docker代碼實(shí)現(xiàn)是直接基于LXC的。自0.9版本開始,Docker開發(fā)了libcon-tainer項(xiàng)目作為更廣泛的容器驅(qū)動實(shí)現(xiàn),從而替換掉了LXC的實(shí)現(xiàn)。目前,Docker還積極推動成立了runC標(biāo)準(zhǔn)項(xiàng)目,并貢獻(xiàn)給開放容器聯(lián)盟,試圖讓容器的支持不再局限于Linux操作系統(tǒng),而是更安全、更開放、更具擴(kuò)展性。
簡單地講,讀者可以將Docker容器理解為一種輕量級的沙盒(sandbox)。每個容器內(nèi)運(yùn)行著一個應(yīng)用,不同的容器相互隔離,容器之間也可以通過網(wǎng)絡(luò)互相通信。容器的創(chuàng)建和停止十分快速,幾乎跟創(chuàng)建和終止原生應(yīng)用一致;另外,容器自身對系統(tǒng)資源的額外需求也十分有限,遠(yuǎn)遠(yuǎn)低于傳統(tǒng)虛擬機(jī)。很多時候,甚至直接把容器當(dāng)作應(yīng)用本身也沒有任何問題。
筆者相信,隨著Docker技術(shù)的進(jìn)一步成熟,它將成為更受歡迎的容器虛擬化技術(shù)實(shí)現(xiàn),并在云計(jì)算和DevOps等領(lǐng)域得到更廣泛的應(yīng)用。
- C++程序設(shè)計(jì)(第3版)
- Computer Vision for the Web
- Boost C++ Application Development Cookbook(Second Edition)
- Java深入解析:透析Java本質(zhì)的36個話題
- Monitoring Elasticsearch
- 手把手教你學(xué)C語言
- SharePoint Development with the SharePoint Framework
- Learning Unity 2D Game Development by Example
- Java程序設(shè)計(jì)案例教程
- Learning Hadoop 2
- Modern C++ Programming Cookbook
- 零基礎(chǔ)學(xué)C語言(升級版)
- QlikView Unlocked
- jQuery從入門到精通(微課精編版)
- C語言程序設(shè)計(jì)教程