Docker基礎(chǔ):Docker是什么,為什么這么火?
一、Docker是什么?
Docker是一個開源的應(yīng)用容器引擎,它基于go語言開發(fā),并遵從Apache2.0開源協(xié)議。使用Docker可以讓開發(fā)者封裝他們的應(yīng)用以及依賴包到一個可移植的容器中,然后發(fā)布到任意的 Linux 機器上運行。Docker 的核心思想打包裝箱,每個箱子是互相隔離的,互不影響。
二、Docker 歷史
2010 年,幾個搞 IT 的年輕人,在美國舊金山成立了一家名叫 dotCloud 的公司。dotCloud 的平臺即服務(wù)(Platform-as-a-Service, PaaS)提供商。dotCloud 平臺底層利用了 Linux 的 LXC 容器技術(shù)。
什么是LXC?
LXC 是 Docker 的底層基石,但是在 Docker 0.9 版本的時候,Docker引入了基于 Go 語言構(gòu)建的 Libcontainer 的 execution driver。有了 Libcontainer 這個項目,Docker 不再需要依賴于 Linux 部件(LXC,libvirt,systemd-nspawn...)就可以處理 namespaces、control groups、capabilities、apparmor profiles、network interfaces。LXC 逐漸淪為可選項。
后來為了方便創(chuàng)建和管理這些容器,dotCloud 基于 Google 公司推出的 Go 語言開發(fā)了一套內(nèi)部工具,之后被命名為 Docker。Docker 就是這樣誕生的。
Docker 1.8 版本 中 LXC 被 棄用,在Docker 1.10版本LXC 徹底離開Docker。Docker 官方推出的Libcontainer 集成了 Linux 內(nèi)核中的很多特性,成為一個獨立、穩(wěn)定且不受制于 Linux 的 Library。
2013 年 3 月,dotCloud 公司的創(chuàng)始人之一28 歲的 Solomon?Hykes 正式?jīng)Q定,將 Docker 項目開源。
開源當月發(fā)布了 Docker 0.1 版本。此后的每一個月, Docker 都會發(fā)布一個迭代版本。到 2014 年 6 月 9 日, Docker 1.0 版本正式發(fā)布了。
這個時候的 Docker已經(jīng)成為行業(yè)里人氣最火的開源技術(shù)、。Google、微軟、Amazon、 VMware 這樣的互聯(lián)網(wǎng)巨頭們都對它青睞有加,表示將全力支持。Docker 火了之后, dotCloud 公司干脆把公司名字也改成了 Docker Inc. 。
三、為什么選擇 Docker
3.1 更高效的利用系統(tǒng)資源
由于容器不需要進行硬件虛擬以及運行完整操作系統(tǒng)等額外的開銷,Docker 對系統(tǒng)資源的利用率比虛擬機更高。無論是應(yīng)用執(zhí)行速度、內(nèi)存損耗或者文件存儲,都要比傳統(tǒng)虛擬機技術(shù)更高效。
3.2 更快速的啟動時間
傳統(tǒng)的虛擬機技術(shù)啟動應(yīng)用服務(wù)往往需要好幾分鐘, Docker 容器應(yīng)用,由于直接運行于宿主內(nèi)核,無需啟動完整的操作系統(tǒng),可以達到秒級、甚至毫秒級的啟動時間。大大的節(jié)約了項目部署的時間。
3.3 保證一致的項目運行環(huán)境
開發(fā)過程中一個非常常見的問題是本地環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境不一致。經(jīng)常能碰到開發(fā)、測試環(huán)境運行正常而到了生產(chǎn)環(huán)境出現(xiàn)莫名其秒的問題。而 Docker 的鏡像提供了除內(nèi)核外完整的項目運行環(huán)境,確保了應(yīng)用運行環(huán)境一致性,從而避免了因為開發(fā)環(huán)境不一致造成的部署問題。
3.4 持續(xù)交付和部署
對開發(fā)和運維(DevOps)人員來說,最理想的就是一次創(chuàng)建或配置,可以在任意服務(wù)器上正常運行。
使用 Docker 可以通過定制應(yīng)用鏡像來實現(xiàn)持續(xù)集成、持續(xù)交付、部署。開發(fā)人員可以通過 Dockerfile 來進行鏡像構(gòu)建,并結(jié)合持續(xù)集成(Continuous Integration)系統(tǒng)進行集成測試,而運維人員則可以直接在生產(chǎn)環(huán)境中快速部署該鏡像,甚至結(jié)合持續(xù)部署(Continuous Delivery/Deployment)系統(tǒng)進行自動化部署。
而且使用 Dockerfile 使鏡像構(gòu)建透明化,不僅僅開發(fā)團隊可以理解應(yīng)用運行環(huán)境,也方便運維團隊理解應(yīng)用運行所需條件,幫助更好的在生產(chǎn)環(huán)境中部署該鏡像。
3.5 更輕松的服務(wù)遷移
由于 Docker 確保了運行環(huán)境的一致性,使得應(yīng)用的遷移更加容易。Docker 可以在很多平臺上運行,無論是物理機、虛擬機、公有云、私有云,甚至是筆記本,其運行結(jié)果是一致的。因此用戶可以很輕易地將在一個平臺上運行的應(yīng)用,遷移到另一個平臺上,而不用擔心運行環(huán)境的變化導(dǎo)致應(yīng)用無法正常運行的情況。
3.6 更輕松的維護和擴展
Docker 使用的分層存儲以及鏡像的技術(shù),使得應(yīng)用重復(fù)部分的復(fù)用更為容易,也使得應(yīng)用的維護更新更加簡單,基于基礎(chǔ)鏡像進一步擴展鏡像也變得非常簡單。此外,Docker 團隊同各個開源項目團隊一起維護了一大批高質(zhì)量的 官方鏡像,既可以直接在生產(chǎn)環(huán)境使用,又可以作為基礎(chǔ)進一步定制,大大降低了應(yīng)用服務(wù)的鏡像制作成本。
四、容器與虛擬機的比較
Docker 和傳統(tǒng)虛擬化方式的不同,容器是在操作系統(tǒng)層面上實現(xiàn)虛擬化,直接復(fù)用本地主機的操作系統(tǒng),而傳統(tǒng)方式則是在硬件層面實現(xiàn)。
與傳統(tǒng)的虛擬機相比,Docker 優(yōu)勢體現(xiàn)為啟動速度快、占用體積小。
作者:郝光明 IT技術(shù)分享社區(qū)
歡迎關(guān)注:IT技術(shù)分享社區(qū)