什么是 Docker
Docker 最初是 dotCloud 公司創(chuàng)始人 Solomon Hykes 在法國期間發(fā)起的一個公司內部項目棱烂,它是基于 dotCloud 公司多年云服務技術的一次革新,并于 2013 年 3 月以 Apache 2.0 授權協議開源忽冻,主要項目代碼在 GitHub 上進行維護榨咐。Docker 項目后來還加入了 Linux 基金會天揖,并成立推動 開放容器聯盟(OCI)撑柔。
Docker 自開源后受到廣泛的關注和討論帆吻,至今其 GitHub 項目已經超過 4 萬 6 千個星標和一萬多個 fork普泡。甚至由于 Docker 項目的火爆播掷,在 2013 年底,dotCloud 公司決定改名為 Docker撼班。Docker 最初是在 Ubuntu 12.04 上開發(fā)實現的歧匈;Red Hat 則從 RHEL 6.5 開始對 Docker 進行支持;Google 也在其 PaaS 產品中廣泛應用 Docker砰嘁。
Docker 使用 Google 公司推出的 Go 語言 進行開發(fā)實現件炉,基于 Linux 內核的 cgroup勘究,namespace,以及 AUFS 類的 Union FS 等技術斟冕,對進程進行封裝隔離口糕,屬于 操作系統(tǒng)層面的虛擬化技術。由于隔離的進程獨立于宿主和其它的隔離的進程磕蛇,因此也稱其為容器景描。最初實現是基于 LXC,從 0.7 版本以后開始去除 LXC秀撇,轉而使用自行開發(fā)的 libcontainer超棺,從 1.11 開始,則進一步演進為使用 runC 和 containerd呵燕。
Docker 在容器的基礎上棠绘,進行了進一步的封裝,從文件系統(tǒng)再扭、網絡互聯到進程隔離等等氧苍,極大的簡化了容器的創(chuàng)建和維護。使得 Docker 技術比虛擬機技術更為輕便霍衫、快捷候引。
下面的圖片比較了 Docker 和傳統(tǒng)虛擬化方式的不同之處。傳統(tǒng)虛擬機技術是虛擬出一套硬件后敦跌,在其上運行一個完整操作系統(tǒng)澄干,在該系統(tǒng)上再運行所需應用進程;而容器內的應用進程直接運行于宿主的內核柠傍,容器內沒有自己的內核麸俘,而且也沒有進行硬件虛擬。因此容器要比傳統(tǒng)虛擬機更為輕便惧笛。
為什么要使用 Docker从媚?
作為一種新興的虛擬化方式,Docker 跟傳統(tǒng)的虛擬化方式相比具有眾多的優(yōu)勢患整。
更高效的利用系統(tǒng)資源
由于容器不需要進行硬件虛擬以及運行完整操作系統(tǒng)等額外開銷拜效,Docker 對系統(tǒng)資源的利用率更高。無論是應用執(zhí)行速度各谚、內存損耗或者文件存儲速度紧憾,都要比傳統(tǒng)虛擬機技術更高效。因此昌渤,相比虛擬機技術赴穗,一個相同配置的主機,往往可以運行更多數量的應用。
更快速的啟動時間
傳統(tǒng)的虛擬機技術啟動應用服務往往需要數分鐘般眉,而 Docker 容器應用了赵,由于直接運行于宿主內核,無需啟動完整的操作系統(tǒng)甸赃,因此可以做到秒級柿汛、甚至毫秒級的啟動時間。大大的節(jié)約了開發(fā)辑奈、測試苛茂、部署的時間。
一致的運行環(huán)境
開發(fā)過程中一個常見的問題是環(huán)境一致性問題鸠窗。由于開發(fā)環(huán)境妓羊、測試環(huán)境、生產環(huán)境不一致稍计,導致有些 bug 并未在開發(fā)過程中被發(fā)現躁绸。而 Docker 的鏡像提供了除內核外完整的運行時環(huán)境,確保了應用運行環(huán)境一致性臣嚣,從而不會再出現 「這段代碼在我機器上沒問題啊」 這類問題净刮。
持續(xù)交付和部署
對開發(fā)和運維(DevOps)人員來說,最希望的就是一次創(chuàng)建或配置硅则,可以在任意地方正常運行淹父。
使用 Docker 可以通過定制應用鏡像來實現持續(xù)集成、持續(xù)交付怎虫、部署暑认。開發(fā)人員可以通過 Dockerfile 來進行鏡像構建,并結合 持續(xù)集成(Continuous Integration) 系統(tǒng)進行集成測試大审,而運維人員則可以直接在生產環(huán)境中快速部署該鏡像蘸际,甚至結合 持續(xù)部署(Continuous Delivery/Deployment) 系統(tǒng)進行自動部署。
而且使用 Dockerfile 使鏡像構建透明化徒扶,不僅僅開發(fā)團隊可以理解應用運行環(huán)境粮彤,也方便運維團隊理解應用運行所需條件,幫助更好的生產環(huán)境中部署該鏡像姜骡。
更輕松的遷移
由于 Docker 確保了執(zhí)行環(huán)境的一致性导坟,使得應用的遷移更加容易。Docker 可以在很多平臺上運行圈澈,無論是物理機惫周、虛擬機、公有云士败、私有云,甚至是筆記本,其運行結果是一致的谅将。因此用戶可以很輕易的將在一個平臺上運行的應用漾狼,遷移到另一個平臺上,而不用擔心運行環(huán)境的變化導致應用無法正常運行的情況饥臂。
更輕松的維護和擴展
Docker 使用的分層存儲以及鏡像的技術逊躁,使得應用重復部分的復用更為容易,也使得應用的維護更新更加簡單隅熙,基于基礎鏡像進一步擴展鏡像也變得非常簡單稽煤。此外,Docker 團隊同各個開源項目團隊一起維護了一大批高質量的 官方鏡像囚戚,既可以直接在生產環(huán)境使用酵熙,又可以作為基礎進一步定制,大大的降低了應用服務的鏡像制作成本驰坊。
評估 Docker 的安全性時匾二,主要考慮三個方面:
由內核的命名空間和控制組機制提供的容器內在安全 Docker 程序(特別是服務端)本身的抗攻擊性 內核安全性的加強機制對容器安全性的影響
更多關于安全內容推薦:ISC大會關于-云計算虛擬化的一個分享