docker中文 docker手冊 docker教程html
2015-12-21 13:52:00程序員
做者: 先知docker
放在兩年前,你不認識Docker情有可原。但若是如今你還這麼說,很差意思,我只能說你OUT了。你最好立刻get起來,由於有可能大家公司很快就會引入Docker。數據庫
今天就和你們討論討論這個備受好評的應用,讓咱們來揭開他的真面目!後端
【一】從dotCloud到Docker--低調奢華有內涵安全
一、追根溯源:dotCloud服務器
時間倒回到兩年前,有一個名不見經傳的小公司,他的名字叫作:dotCloud。dotCloud公司主要提供的是基於 PaaS(Platform as a Service,平臺及服務)平臺爲開發者或開發商提供技術服務,並提供的開發工具和技術框架。網絡
初創企業老是艱難的,dotCloud也是同樣。在IBM,亞馬遜,谷歌等大公司的擠壓下,dotCloud舉步維艱。即便2011年拿到了1000萬美圓的融資,可和上述大公司比起來,也不過是杯水車薪。框架
隨着開源的洪流襲來,在2013年dotCloud 的創始人,28歲的Solomon Hykes作了一個艱難的決定:將dotCloud的核心引擎開源!然而一旦這個基於 LXC(Linux Container)技術的核心管理引擎開源,dotCloud公司就至關於走上了一條"不歸路"。運維
可正是這個背注一擲的舉動,卻帶來了全球技術人員的熱潮,衆程序員驚呼:太方便了,太方便了。也正是這個決定,讓全部的IT巨頭也爲之一顫。一個新的公司也隨之出世,它就是:Docker。
二、Docker出世:從Docker0.1到Docker1.0
一個春秋,跨越了Docker的成名路。
在互聯網時代,一晚上成名早已不是什麼新聞。Docker 這個技術公司,向咱們證實了,成爲一個"國際巨星",只須要一個月。2013年2月決定開源,到2013年3月20日發佈Docker0.1,只用了一個月的時間。
從此幾乎每一個一個月,Docker都會發佈一個版本。而Docker0.1的發佈像是一個宣言,昭示着一個Docker正在以一個新興容器領導者的姿態邁進。
正如咱們所知,從Docker0.1到Docker1.0,15個月的時間,Docker迅速成長。在2014年6月9日,Docker團隊宣佈發佈Docker 1.0版。Docker1.0下載地址
2014年6月9日,1.0版本發佈官方聲明
1.0版本標誌着Docker公司認爲Docker平臺已經足夠成熟,並能夠被應用到產品中(還提供了一些須要付費的支持選項)。
在這15個月中,Docker共收到了超過460位貢獻者的8741條改進建議,Docker的用心經營下社區十分活躍。能夠說,Docker的成功起於開源,發於社區。
一年的時間,使一個圍繞着Docker的小型初創企業生態體系逐漸造成。Docker前後贏得了Google、微軟、Amazon、VMware等巨頭的青睞,巨頭們紛紛示意將保證本身平臺與Docker容器技術的兼容性。微軟還宣佈來要推出面向Windows的Docker客戶端。
到了2014年9月,Docker完成4000萬美圓的C輪融資,彼時市值與約爲4億美圓。能夠說Docker一路風生水起,迅速贏得了IT圈的信賴。而且在8月12Docker發佈了Docker1.8正式版(下載地址見末尾)。
但Docker是如何作到這些的呢?Docker的成功之路可否被複制呢?
【二】如何定義Docker?
Docker 是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux 機器上。
Docker是一個從新定義了程序開發測試、交付和部署過程的開放平臺,Docker則能夠稱爲構建一次,處處運行,這就是Docker提出的"Build once,Run anywhere"
Docker:Build once,Run anywhere
爲了更好的認識Docker,咱們先來了解幾個必備詞彙:鏡像,容器和倉庫。
一、鏡像(image):Docker 鏡像就是一個只讀的模板,鏡像能夠用來建立 Docker 容器。Docker 提供了一個很簡單的機制來建立鏡像或者更新現有的鏡像,用戶甚至能夠直接從其餘人那裏下載一個已經作好的鏡像來直接使用。
鏡像是一種文件結構。Dockerfile中的每條命令都會在文件系統中建立一個新的層次結構,文件系統在這些層次上構建起來,鏡像就構建於這些聯合的文件系統之上。
Docker官方網站專門有一個頁面來存儲全部可用的鏡像,網址是:index.docker.io。
二、容器( Container):容器是從鏡像建立的運行實例。它能夠被啓動、開始、中止、刪除。每一個容器都是相互隔離的、保證安全的平臺。能夠把容器看作是一個簡易版的 Linux 環境,Docker 利用容器來運行應用。
三、倉庫:倉庫是集中存放鏡像文件的場所,倉庫註冊服務器(Registry)上每每存放着多個倉庫,每一個倉庫中又包含了多個鏡像,每一個鏡像有不一樣的標籤(tag)。目前,最大的公開倉庫是 Docker Hub,存放了數量龐大的鏡像供用戶下載。
Docker倉庫用來保存咱們的images,當咱們建立了本身的image以後咱們就可使用push命令將它上傳到公有或者私有倉庫,這樣下次要在另一臺機器上使用這個image時候,只須要從倉庫上pull下來就能夠了。
Docker的運行離不開這幾位的支持,Docker的成功也是拜幾位所賜。也有人會誤覺得,Docker就是容器。但Docker只會傲嬌地說:我不是容器,我是管理容器的引擎。
Docker中文手冊上解釋說:Docker是一個開源的引擎,能夠輕鬆的爲任何應用建立一個輕量級的、可移植的、自給自足的容器。開發者在筆記本上編譯測試經過的容器能夠批量地在生產環境中部署,包括VMs(虛擬機)、bare metal、OpenStack 集羣和其餘的基礎應用平臺。
從這裏咱們能夠看出,Docker並不是是容器,而是管理容器的引擎。Docker爲應用打包、部署的平臺,而非單純的虛擬化技術。
【三】Docker與虛擬化爭鋒
容器技術與傳統虛擬機性能對比
談到虛擬化,不少人又發問了。Docker和虛擬化有什麼區別?Docker(或者說是容器)的出現是否會取代傳統的虛擬化技術。
提及虛擬化,你們首先想到的必然是VM一類的虛機。這類虛擬機完美的運行了另外一套系統,可以使應用程序,操做系統和硬件三者之間的邏輯不變。
但在惜時如金的如今,這類虛機也面臨着必定的問題,好比:啓動時間太長,你有沒有過在啓動虛擬機後,點開其餘頁面繼續操做,過了一分鐘纔回來的經歷?還有虛擬鏡像體積太大(通常都是幾十GB)等問題。相比之下,Docker的鏡像通常只有二三百兆。而且啓動速度超快, Docker的啓動時間爲毫秒級。
還有一個最大的問題是價格問題,據StackEngine調查分析,有43.8%的企業使用Docker的緣由是VMware太貴。
可是,傳統的虛擬技術還不會被取代。Docker或者說容器技術和虛擬機並不是簡單的取捨關係。
目前,不少企業仍在使用虛擬機技術,緣由很簡單,他們須要一個高效,安全且高可用的構架。然而,剛剛面世兩年的Docker尚未經歷沙場考驗,CaaS(Container as a Service,容器即服務)概念也是近兩年纔剛剛出現。不管是應用管理仍是運行維護方面,Docker都還處於發展與完善階段。
【四】Docker:我爲何不同凡響
Solomon Hykes:成功的要素之一是在正確的時間作了正確的事,咱們一直堅信這個理念。Docker就比如傳統的貨運集裝箱,咱們一直都在努力。咱們努力讓這個技術更加靈活,更容易使用。
站在將來的角度,Docker解決了三大現存問題。
Docker讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux 機器上,即可以實現虛擬化。
俗話說:天下武學惟快不破;在更新迭代如此之快的IT領域更是如此。全部成功的IT公司都必須走在時代的前列,他們的產品應該來自將來。他們有必要要站在將來的角度解決現存的問題。
Docker之父Solomon Hykes:Docker就比如傳統的貨運集裝箱
Solomon Hykes曾經說過,本身在開發dotCloud的PaaS雲時,就發現一個讓人頭痛的問題:應用開發工程師和系統工程師二者之間沒法輕鬆協做發佈產品。Docker解決了難題。讓開發者能專心寫好程序;讓系統工程師專一在應用的水平擴展、穩定發佈的解決方案上。
Docker解決了三大現存問題
一、簡化程序:Docker讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux 機器上,即可以實現虛擬化。
Docker改變了虛擬化的方式,使開發者能夠直接將本身的成果放入Docker中進行管理。方便快捷已是Docker的最大優點,過去須要用數天乃至數週的任務,在Docker容器的處理下,只須要數秒就能完成。
二、避免選擇恐懼症:若是你有選擇恐懼症,仍是資深患者。Docker幫你打包你的糾結!好比Docker鏡像;Docker鏡像中包含了運行環境和配置,因此Docker能夠簡化部署多種應用實例工做。好比Web應用、後臺應用、數據庫應用、大數據應用好比Hadoop集羣、消息隊列等等均可以打包成一個鏡像部署。
三、節省開支:一方面,雲計算時代到來,使開發者沒必要爲了追求效果而配置高額的硬件,Docker改變了高性能必然高價格的思惟定勢。Docker與雲的結合,讓雲空間獲得更充分的利用。不只解決了硬件管理的問題,也改變了虛擬化的方式。
另外一方面,Docker可以是自願額達到充分利用。舉個簡單地例子:凌晨三點的時候只有不多的人會去訪問你的網站,同時你須要比較多的資源執行夜間的批處理任務,經過Docker能夠很簡單的便實現資源的交換。
Docker的這些優點,讓各大IT巨頭紛紛對Docker看好。
【五】統一標準,創建更有活力的生態系統
開放容器技術項目(Open Container Project)
在2015年的DockerCon上推出了開放容器技術項目(Open Container Project)。OCP是一個非營利性組織,其受特許創建通用的容器軟件技術標準。
這個項目聚集了微軟、谷歌、惠普、IBM、英特爾、紅帽(Red Hat)、VMware以及高盛等衆多實力企業,OCP的推出,也使宿敵Docker和CoreOS走向了聯合。讓微軟與本身的競爭對手Linux合做,足以見得Docker的魅力。
谷歌雲計算平臺產品經理克雷格·麥克拉克伊(Craig Mcluckie)說:建立通用容器格式很是重要,單一標準能夠促進更有活力的生態系統。
【六】企業對Docker是否定可?安全是關鍵!
隨着容器技術逐漸獲得IT界的承認,CaaS(Container as a Service,容器即服務)也逐漸造成。而Docker做爲CaaS技術的標杆是否已經獲得企業的承認?是否投入生產呢?
2015年,VMblog.com和CloudCow.com共同組織了一次問卷調查。報告顯示,Docker的早期用戶中,63%的用於QA/Test,53%的用於開發,而且31%的用戶計劃在生產環境中使用Docker,阻礙企業使用Docker的最大因素在於其安全性以及缺乏生產環境下的運維工具(兩個緣由各佔49%左右)。
對Docker應用最普遍的三個領域分別是:Test/QA應用;Web應用;大數據,企業應用。
調查顯示,目前企業對Docker的接受程度在不斷提升。但Docker的安全性彷佛仍舊是企業顧慮的主要緣由,那麼Docker的安全性究竟如何?
Gartner:Docker仍是一項年輕的技術,它的安全性仍不夠成熟
2015年1月,Gartner分析師Joerg Fritsch發佈一份報告,報告顯示:雖然Docker這款容器化工具已經頗具名聲,但Docker的安全性仍不夠成熟。
Joerg Fritsch指出:"Docker與容器技術目前還沒法經過虛擬機管理程序彌合自身最爲嚴重的兩大短板:安全性保障與管理功能,外加在常見控制機制的機密性、完整性與可用性方面提供支持。"
整體來說,Docker的安全性能還不錯,只是這仍是一項年輕的技術、所以目前還沒有積累起可以知足實際生產需求的完整工具生態系統。
其實若是要談論Docker的安全性,咱們就要談論三點:命名空間(Namespace);Docker程序自己的抗攻擊性和加固內核安全性來影響容器的安全性。
企業對Docker是否定可?安全是關鍵!
一、命名空間(Namespace):Docker有五個命名空間:進程、網絡、掛載、宿主和共享內存,爲了隔離有問題的應用,Docker運用Namespace將進程隔離,爲進程或進程組建立已隔離的運行空間,爲進程提供不一樣的命名空間視圖。這樣,每個隔離出來的進程組,對外就表現爲一個container(容器)。須要注意的是,Docker讓用戶誤覺得本身佔據了所有資源,但這並非"虛擬機"。
內核namesapce從內核2.6.15以後被引入,距今已經5年了,在不少大型生產系統中被驗證。他們的設計和靈感提出的時間更早,openvz項目利用namespace從新封裝他們的內核,併合併到主流內核中。openvz最先的版本是2005年的,因此他們的設計和實現都很成熟。
二、Docker程序自己的抗攻擊性:Docker容許你在主機和容器之間共享文件夾,這就容易讓容器突破資源限制,那麼容器就能夠對主機作任何更改了。但實際上,幾乎全部虛擬機系統都有在物理主機和虛擬機之間共享資源的限制,因此這一層的安全性,須要你本身把控。
三、加固內核安全性:默認狀況下,Docker啓動的容器只使用一部份內核capabilities,就算攻擊者在容器中取得了root權限,他能作的破壞也少了,也不能得到主機的更高權限。
由此咱們能夠說:Docker仍是比較安全的,可是你要注意使用在容器中使用非root權限容許進程。
目前來講,Docker的主要應用場景爲:
面向開發人員:快速開發、交付應用程序。開發環境的機器一般內存比較小,以前使用虛擬的時候,常常須要爲開發環境的機器加內存,而如今Docker能夠輕易的讓幾十個服務在Docker中跑起來。
面向運維人員:下降運維成本。正如經過虛擬機來整合多個應用,Docker隔離應用的能力使得Docker能夠整合多個服務器以下降成本。Docker經過鏡像機制,將你的代碼和運行環境直接打包成鏡像,扔到容器啓動便可。
面向企業:Docker自己就發家於PaaS,在Docker面向企業,是能夠提供Paas層的實現;好比,擴展示有的OpenShift或Cloud Foundry平臺來搭建本身的PaaS環境。
【七】評說Docker
Solomon Hykes(Docker之父):"創建一個爲全部生產軟件共有的系統,使用一種被普遍接受的方式,讓它能夠很好的運行和擴展,讓它能夠被全部人依賴,而後將它視爲理所固然的存在,並使用它創造本身的奇蹟,這是個挑戰。
評說Docker
Chris Swan (銀行業的技術專家,曾經有十幾年的時間在從事金融服務業):Docker公司已經創建了清晰的道路,即發展核心能力(libcontainer)、跨業務管理(libswarm)和容器間消息(libchan)。
Docker公司表達了利用自身生態系統的意願。隨着時間的推移,虛擬機和容器(Docker中的"運行"部分)之間的區別極可能變得再也不那麼重要,這將使注意力轉到"構建(build)"和"交付(ship)"方面。
馬全一(Docker中文社區創始人之一):Docker必定會成爲雲計算和大數據領域的重要成員之一。
Docker的出現使得以Docker容器爲單位的雲平臺和Docker容器爲載體的交易平臺成爲可能。任何後端的服務程序,均可以封裝在Docker容器中進行銷售、分發和部署,後端開發者能像Mobile App開發者那樣去作本身的產品來獲利。隨着Golang的發展,必定會有以Golang爲開發語言、Docker爲運行載體的新大數據平臺,成爲Hadoop平臺的競爭者。
Docker,一個迅速走紅,並在技術領域贏得一片好評的一款應用。儘管Docker目前還不夠完善,但已經有不少廠商已經開始使用。同時一批圍繞Docker創建起來的初創企業已經造成,學習Docker風氣正盛。能夠預見在不遠的將來,Docker和CaaS會得到更多的人確定,愈來愈多的企業願意使用Docker這個應用。
PS:貼上一些Docker基本命令
Docker ps用來查看正在運行中的容器。
Docker ps命令的經常使用參數(及組合)以下。
-a: 查看全部容器,包括已經中止運行的。
-l: 查看剛剛啓動的容器。
-q: 只顯示容器ID
-l -q: 則能夠返回剛啓動的容器ID。
Docker stop用來中止運行中的容器,同時你還能夠用Docker start來從新啓動一個已經中止的容器。
Docker restart能夠重啓一個運行中的容器。這就至關於對一個容器先進行stop再start。
Docker內部人員:在Docker 1.0正式發佈以前,就已經有3家主要銀行將其投入到生產應用中
Docker服務對應的版本查看
# sudo Docker version
Docker命令幫助
#sudo Docker //查看Docker的全部命令
#sudo Docker command --help //查看單個Docker命令的幫助,如Docker run --help