Docker基礎(chǔ):Docker是什么,為什么這么火?

一、Docker是什么?
Docker是一個(gè)開(kāi)源的應(yīng)用容器引擎,它基于go語(yǔ)言開(kāi)發(fā),并遵從Apache2.0開(kāi)源協(xié)議。使用Docker可以讓開(kāi)發(fā)者封裝他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任意的 Linux 機(jī)器上運(yùn)行。Docker 的核心思想打包裝箱,每個(gè)箱子是互相隔離的,互不影響。

二、Docker 歷史
2010 年,幾個(gè)搞 IT 的年輕人,在美國(guó)舊金山成立了一家名叫 dotCloud 的公司。dotCloud 的平臺(tái)即服務(wù)(Platform-as-a-Service, PaaS)提供商。dotCloud 平臺(tái)底層利用了 Linux 的 LXC 容器技術(shù)。



什么是LXC?
LXC 是 Docker 的底層基石,但是在 Docker 0.9 版本的時(shí)候,Docker引入了基于 Go 語(yǔ)言構(gòu)建的 Libcontainer 的 execution driver。有了 Libcontainer 這個(gè)項(xiàng)目,Docker 不再需要依賴于 Linux 部件(LXC,libvirt,systemd-nspawn...)就可以處理 namespaces、control groups、capabilities、apparmor profiles、network interfaces。LXC 逐漸淪為可選項(xiàng)。



后來(lái)為了方便創(chuàng)建和管理這些容器,dotCloud 基于 Google 公司推出的 Go 語(yǔ)言開(kāi)發(fā)了一套內(nèi)部工具,之后被命名為 Docker。Docker 就是這樣誕生的。
Docker 1.8 版本 中 LXC 被 棄用,在Docker 1.10版本LXC 徹底離開(kāi)Docker。Docker 官方推出的Libcontainer 集成了 Linux 內(nèi)核中的很多特性,成為一個(gè)獨(dú)立、穩(wěn)定且不受制于 Linux 的 Library。



2013 年 3 月,dotCloud 公司的創(chuàng)始人之一28 歲的 Solomon?Hykes 正式?jīng)Q定,將 Docker 項(xiàng)目開(kāi)源。
開(kāi)源當(dāng)月發(fā)布了 Docker 0.1 版本。此后的每一個(gè)月, Docker 都會(huì)發(fā)布一個(gè)迭代版本。到 2014 年 6 月 9 日, Docker 1.0 版本正式發(fā)布了。



這個(gè)時(shí)候的 Docker已經(jīng)成為行業(yè)里人氣最火的開(kāi)源技術(shù)、。Google、微軟、Amazon、 VMware 這樣的互聯(lián)網(wǎng)巨頭們都對(duì)它青睞有加,表示將全力支持。Docker 火了之后, dotCloud 公司干脆把公司名字也改成了 Docker Inc. 。





三、為什么選擇 Docker
3.1 更高效的利用系統(tǒng)資源
由于容器不需要進(jìn)行硬件虛擬以及運(yùn)行完整操作系統(tǒng)等額外的開(kāi)銷,Docker 對(duì)系統(tǒng)資源的利用率比虛擬機(jī)更高。無(wú)論是應(yīng)用執(zhí)行速度、內(nèi)存損耗或者文件存儲(chǔ),都要比傳統(tǒng)虛擬機(jī)技術(shù)更高效。
3.2 更快速的啟動(dòng)時(shí)間
傳統(tǒng)的虛擬機(jī)技術(shù)啟動(dòng)應(yīng)用服務(wù)往往需要好幾分鐘, Docker 容器應(yīng)用,由于直接運(yùn)行于宿主內(nèi)核,無(wú)需啟動(dòng)完整的操作系統(tǒng),可以達(dá)到秒級(jí)、甚至毫秒級(jí)的啟動(dòng)時(shí)間。大大的節(jié)約了項(xiàng)目部署的時(shí)間。
3.3 保證一致的項(xiàng)目運(yùn)行環(huán)境
開(kāi)發(fā)過(guò)程中一個(gè)非常常見(jiàn)的問(wèn)題是本地環(huán)境、測(cè)試環(huán)境、生產(chǎn)環(huán)境不一致。經(jīng)常能碰到開(kāi)發(fā)、測(cè)試環(huán)境運(yùn)行正常而到了生產(chǎn)環(huán)境出現(xiàn)莫名其秒的問(wèn)題。而 Docker 的鏡像提供了除內(nèi)核外完整的項(xiàng)目運(yùn)行環(huán)境,確保了應(yīng)用運(yùn)行環(huán)境一致性,從而避免了因?yàn)殚_(kāi)發(fā)環(huán)境不一致造成的部署問(wèn)題。
3.4 持續(xù)交付和部署
對(duì)開(kāi)發(fā)和運(yùn)維(DevOps)人員來(lái)說(shuō),最理想的就是一次創(chuàng)建或配置,可以在任意服務(wù)器上正常運(yùn)行。
使用 Docker 可以通過(guò)定制應(yīng)用鏡像來(lái)實(shí)現(xiàn)持續(xù)集成、持續(xù)交付、部署。開(kāi)發(fā)人員可以通過(guò) Dockerfile 來(lái)進(jìn)行鏡像構(gòu)建,并結(jié)合持續(xù)集成(Continuous Integration)系統(tǒng)進(jìn)行集成測(cè)試,而運(yùn)維人員則可以直接在生產(chǎn)環(huán)境中快速部署該鏡像,甚至結(jié)合持續(xù)部署(Continuous Delivery/Deployment)系統(tǒng)進(jìn)行自動(dòng)化部署。
而且使用 Dockerfile 使鏡像構(gòu)建透明化,不僅僅開(kāi)發(fā)團(tuán)隊(duì)可以理解應(yīng)用運(yùn)行環(huán)境,也方便運(yùn)維團(tuán)隊(duì)理解應(yīng)用運(yùn)行所需條件,幫助更好的在生產(chǎn)環(huán)境中部署該鏡像。
3.5 更輕松的服務(wù)遷移
由于 Docker 確保了運(yùn)行環(huán)境的一致性,使得應(yīng)用的遷移更加容易。Docker 可以在很多平臺(tái)上運(yùn)行,無(wú)論是物理機(jī)、虛擬機(jī)、公有云、私有云,甚至是筆記本,其運(yùn)行結(jié)果是一致的。因此用戶可以很輕易地將在一個(gè)平臺(tái)上運(yùn)行的應(yīng)用,遷移到另一個(gè)平臺(tái)上,而不用擔(dān)心運(yùn)行環(huán)境的變化導(dǎo)致應(yīng)用無(wú)法正常運(yùn)行的情況。
3.6 更輕松的維護(hù)和擴(kuò)展
Docker 使用的分層存儲(chǔ)以及鏡像的技術(shù),使得應(yīng)用重復(fù)部分的復(fù)用更為容易,也使得應(yīng)用的維護(hù)更新更加簡(jiǎn)單,基于基礎(chǔ)鏡像進(jìn)一步擴(kuò)展鏡像也變得非常簡(jiǎn)單。此外,Docker 團(tuán)隊(duì)同各個(gè)開(kāi)源項(xiàng)目團(tuán)隊(duì)一起維護(hù)了一大批高質(zhì)量的 官方鏡像,既可以直接在生產(chǎn)環(huán)境使用,又可以作為基礎(chǔ)進(jìn)一步定制,大大降低了應(yīng)用服務(wù)的鏡像制作成本。
四、容器與虛擬機(jī)的比較
Docker 和傳統(tǒng)虛擬化方式的不同,容器是在操作系統(tǒng)層面上實(shí)現(xiàn)虛擬化,直接復(fù)用本地主機(jī)的操作系統(tǒng),而傳統(tǒng)方式則是在硬件層面實(shí)現(xiàn)。



與傳統(tǒng)的虛擬機(jī)相比,Docker 優(yōu)勢(shì)體現(xiàn)為啟動(dòng)速度快、占用體積小。

特性
Docker
虛擬機(jī)
啟動(dòng)
秒級(jí)
分鐘級(jí)
硬盤使用
MB
GB
性能
接近原生
較差
系統(tǒng)支持量
單機(jī)支持上千個(gè)容器
一般幾十個(gè)

作者:郝光明 IT技術(shù)分享社區(qū)


歡迎關(guān)注:IT技術(shù)分享社區(qū)