Docker經過這么幾年的發展,到如今更是火熱到即使你沒吃過豬也見過豬跑的地步,本節會給大家介紹docker的一些含義,讓大家了解docker
Docker是一個開放源代碼軟件項目,讓應用程序布署在軟件容器下的工作可以自動化進行,借此在linux操作系統上,提供一個額外的軟件抽象層,以及操作系統層虛擬化的自動管理機制。Docker利用Linux核心中的資源分離機制,例如cgroups,以及Linux核心命名空間(name space),來建立獨立的軟件容器(containers)。這可以在單一Linux實體下運作,避免啟動一個虛擬機器造成的額外負擔。
——摘自維基百科
docker的中文含義 碼頭工人 ,這個翻譯初看會覺得很怪異,其實官方取名這個名字有包含隱喻的意思在內.
我們再看看docker的logo,一頭像船的鯨魚上面裝載著許許多多的箱子,結合* 碼頭工人* 的意思,我們其實可以想到* 集裝箱* 這個概念, 集裝箱 是全球物流系統中一個非常重要的發明,他帶來了物流的規范化,統一化,極大的節約了人力物理和時間成本。
我們可以想想在集裝箱這個定義出來之前的貨物運輸:貨物一箱箱的搬上貨車送到附近的火車站,然后一箱箱卸下,再一箱箱的搬上火車運送到附近的碼頭…
上述的過程中不難發現大量的人力和時間成本都花費在一箱箱的搬運上面,在運輸速度一定的情況下,裝卸就成為了物流的瓶頸。
在* 集裝箱 *出現后這個問題得到了極大的改善。集裝箱重要在它提供了一種通用的封裝貨物的標準規格(尺寸,外形符合統一標準),這樣就產生了一個巨大的優點:在物流運輸中只需要在運輸前一次封裝,集裝箱就可以放上火車,卡車,拉到碼頭,直接放在貨船上;卸船之后直接再放上火車,卡車,運送到目的地。而且由于集裝箱符合統一標準,整個流程非常容易機械化,這引發了以集裝箱為中心的整個全球物流的標準化進程,從而節省了大量的時間資源和人力資源,成本迅速下降,促進了全球資源的流動與重新配置。
docker就像碼頭的工人一樣,把應用打包為一個個封裝好的標準集裝箱,就是大家口中經常鏡像文件。那docker為業內帶來了什么呢?
以前我們搭建一個網站,你可能會裝php,MySQL,Apache等等一堆軟件,好花費大半天的時間這個網站能正常運行起來了。
一段時間后我們需要更高的PHP版本來搭建一個其他類型的網站,版本沖突了咋整?一番google后,費了九牛二虎之力兩個網站終于能共同運行了。
老板后來告訴你由于網站太火爆了我們需要換一臺服務器遷移過去,于是你又不得不巴拉巴拉的折騰一番將所有的環境重新配置一遍。
老板小手一拍,我們要優化我們的服務,在全國各地都建立節點提供服務,你掰一掰的你手指頭發現有數不清的環境需要搭建,你的內心是崩潰的。
就和 集裝箱 一樣,docker為我們帶來的是標準,具體一點說就是鏡像。在docker當中鏡像其實就是你把一大包工具打包成一個集裝箱交于docker運行,鏡像與鏡像之間互不影響(集裝箱與集裝箱之間也是互不影響運輸)。
在docker中,鏡像是無法直接運行的,我猜想這并不是技術上的原因,而是工程設計上的原因。因為一般來說,一個軟件的某個具體版本只會打包成一個鏡像。如果鏡像可以配置,運行的話,在使用過程中很可能會對鏡像造成破壞。
那怎么樣避免這個問題呢,就是再加一層,也就是相當于用了分身術,只要本尊沒問題,分身怎么撲街都不會真正的跪掉。多加的這一層分身,就叫容器(Container),這個名字也挺形象,它就像個盒子一樣,你的應用在里面運行,而且多了一層安全機制。你想使用服務或把你的應用跑起來的話,只需要使用鏡像新創建一個容器就可以了(也是一條命令搞定),而鏡像還放在那里不動,沒辦法,金貴嘛。
docker正是在部署過程中,將上面那些重復的部分,由docker自動化完成。只需要在第一次部署時,構建完可用的docker鏡像。然后在以后使用的過程中,短短的幾行命令,就可以直接拉取鏡像,根據這個鏡像創建出一個容器,把服務跑起來了。所需要的僅僅是安裝了docker的服務器,一個Dockerfile文件,以及比較流暢的網絡而已。真可謂 一次構建,到處部署 。
需要nginx,直接pull nginx鏡像完事遷移服務器?直接下載一個非常小的Dockerfile,安裝一個docker環境即可,簡單的不能在簡單多個版本共存?新建一個鏡像,愛用哪個版本用哪個,容器的隔離性讓我們就是這么任性到這個地方,你可能已經發現了,docker鏡像成為了一種像集裝箱那樣的標準貨件。它不像傳統的軟件交付方式那樣,只把代碼以及說明文檔之類的給你就完了,而是直接給你一個標準docker貨件,它可能是Dockerfile,或者直接就是鏡像,這個標準件不僅包括了代碼本身,還包括了代碼運行的OS等各種整體環境。
于是,誰想用我的服務,直接拉取鏡像,實例化一個容器就可以了,能直接提供你所要的服務,不再像之前那樣有繁復的安裝過程————這些都有人給你做過了。
有人可能會說,這些不是虛擬機都做到了么,還要docker干嘛?
傳統虛擬機就像一個老爺爺,走路晃晃悠悠,還需要分配資源,給予照顧才行。反觀docker則像是一個健步如飛的年輕小伙子,干啥事都是一個字* 快*。
容器不需要進行硬件虛擬以及運行完整操作系統等額外開銷,Docker 對系統資源的利用率更高。無論是應用執行速度、內存損耗或者文件存儲速度,都要比傳統虛擬機技術更高效。因此,相比虛擬機技術,一個相同配置的主機,往往可以運行更多數量的應用。傳統的虛擬機技術啟動應用服務往往需要數分鐘,而 Docker 容器應用,由于直接運行于宿主內核,無需啟動完整的操作系統,因此可以做到秒級、甚至毫秒級的啟動時間。大大的節約了開發、測試、部署的時間。Docker 使用的分層存儲以及鏡像的技術,使得應用重復部分的復用更為容易,也使得應用的維護更新更加簡單,基于基礎鏡像進一步擴展鏡像也變得非常簡單。此外,Docker 團隊同各個開源項目團隊一起維護了一大批高質量的官方鏡像,既可以直接在生產環境使用,又可以作為基礎進一步定制,大大的降低了應用服務的鏡像制作成本。下圖是docker與傳統虛擬機性能對比。
轉自: http://xgfe.github.io/2016/12/21/scliuyang/docker1/?utm_source=tuicool&utm_medium=referral
新聞熱點
疑難解答