玩轉(zhuǎn)docker(1)-基礎(chǔ)知識

Docker 簡介

什么是Docker

官方定義:Docker是以Docker容器為資源分割和調(diào)度的基本單位舵稠,封裝整個軟件運行時環(huán)境抱虐,為開發(fā)者和系統(tǒng)管理員設(shè)計的锻梳,用于構(gòu)建晦墙、發(fā)布和運行分布式應用的平臺巢钓。
Docker使用Go語言進行開發(fā)實現(xiàn)错忱,基于Linux內(nèi)核的cgroup霍弹,namespace等技術(shù)谒撼,對進程進行封裝隔離楼咳,由于隔離的進程獨立于宿主和其他隔離的進程因此被稱為容器熄捍。最初實現(xiàn)是基于LXC,從0.7版本以后開始去除LXC轉(zhuǎn)而使用自行開發(fā)的libcontainer母怜,從1.11開始則進一步演化使用runC和containerd余耽。

Docker版本發(fā)展史

  1. 2013年3月:Docker正式在github上發(fā)布0.1版本,遵從Apache 2.0開源協(xié)議
  2. 2014年6月:Docker1.0版本正式發(fā)布
  3. 2017年2月:發(fā)布1.13.1版本
  4. 2017年3月:docker團隊宣布企業(yè)版Docker Enterprise Edition(EE)發(fā)布苹熏,而免費的Docker Engine改名為Docker Community Edition(CE)宾添,并采用基于時間的版本號方案,同時發(fā)布了Docker EE和Docker CE的17.03版本柜裸,自此Docker CE/EE每個季度發(fā)布一次季度版本缕陕,每個月發(fā)布一次EDGE版本。
  5. 截止目前的最新版本為 19.03.5

為什么要用Docker

作為一個新興的虛擬化方式疙挺,Docker跟傳統(tǒng)的虛擬化方式想比較有眾多的優(yōu)勢:

持續(xù)部署與測試

容器消除了線上線下的環(huán)境差異扛邑,保證了應用生命周期的環(huán)境一致性和標準化。開發(fā)人員使用鏡像實現(xiàn)標準開發(fā)環(huán)境的構(gòu)建铐然,開發(fā)完成后通過封裝著完整環(huán)境和應用的鏡像進行遷移蔬崩。因此測試和運維人員可以直接部署軟件鏡像來進行測試和發(fā)布,大大簡化了持續(xù)集成搀暑、測試和發(fā)布的過程

跨云平臺支持

容器帶來的好處之一就是其適用性沥阳,越來越多云平臺支持容器,用戶不用在擔心受到云平臺的捆綁自点,同時也讓應用多平臺混合部署成為可能桐罕。

高資源利用率

由于容器不需要進行硬件虛擬以及運行完整操作系統(tǒng)的額外開銷,Docker對系統(tǒng)資源的利用率更高桂敛。無論是執(zhí)行速度功炮、內(nèi)存損耗等都要比傳統(tǒng)虛擬機技術(shù)更加高效。

環(huán)境標準化和版本控制

基于容器提供的環(huán)境一致性和標準化术唬,可以使用git等工具對容器鏡像進行版本控制薪伏,想比較基于代碼的版本控制來說,你還可以對整個應用運行環(huán)境實現(xiàn)版本控制粗仓,一旦出現(xiàn)故障可以快速 回滾嫁怀。

應用鏡像倉庫

Docker官方構(gòu)建了一個鏡像倉庫设捐,組織和管理形式類似與github,其上已經(jīng)積累了成千上萬的鏡像塘淑,因為Docker的跨平臺適配性挡育,相當于為用戶提供了一個非常有用的應用商店,所有人都可以自由下載朴爬。

Docker的基本概念

Docker中包含三個基本概念:

  • 鏡像 Image
  • 容器 Container
  • 倉庫 Repository
    理解這三個基本概念就理解了Docker的整個生命周期。


    三者的關(guān)系

Docker鏡像

Docker鏡像是一個特殊的文件系統(tǒng)橡淆,除了提供容器運行時所需的程序召噩、庫、資源逸爵、配置等文件外具滴,還包含一些為運行時準備的一些配置參數(shù),鏡像不包含任何動態(tài)數(shù)據(jù)师倔,其內(nèi)容在構(gòu)建之后也不會被改變构韵。
例如官方鏡像ubuntu就包含了完整的一套unbutu最小系統(tǒng)的root文件系統(tǒng)。
docker中鏡像并非是想一個ISO那樣打包文件趋艘,而是一個虛擬的概念其實際體現(xiàn)并非由一個文件組成疲恢,而是由一組文件系統(tǒng)組成。

鏡像定義

鏡像是一堆只讀層的統(tǒng)一視角瓷胧,上圖左邊我們看到多個只讀層显拳,他們重疊在一起,除了最下面一層搓萧,其他層都會有一個指針指向下一層杂数。這些層是Docker內(nèi)部的實現(xiàn)細節(jié),并且能夠在主機的文件系統(tǒng)上訪問到瘸洛。統(tǒng)一文件系統(tǒng)技術(shù)能夠?qū)⒉煌膶诱铣梢粋€文件系統(tǒng)揍移,為這些層提供了一個統(tǒng)一的視角,這樣就隱藏了多層的存在反肋,在用戶的角度來看那伐,只存在一個文件系統(tǒng)。就是上圖右側(cè)所示石蔗。

Docker容器

鏡像和容器的關(guān)系喧锦,就像是面向?qū)ο缶幊讨械念惡蛯嵗粯樱R像是靜態(tài)的定義抓督,容器是鏡像的運行的實體燃少,容器可以被創(chuàng)建、啟動铃在、停止阵具、刪除等碍遍。
容器的實質(zhì)是進程,但與直接在宿主執(zhí)行的進程不同阳液,容器進程運行于屬于自己的獨立的命名空間怕敬。因此容器可以擁有自己的root文件系統(tǒng)、自己的網(wǎng)絡(luò)配置帘皿、自己的進程空間甚至自己的用戶ID空間东跪。容器內(nèi)的進程是運行在一個隔離的環(huán)境里,使用起來就像在一個獨立于宿主的系統(tǒng)下操作一樣鹰溜。這種特性使得容器封裝的應用比直接在宿主運行更加安全虽填。

容器定義

容器的定義和鏡像幾乎一樣,也是一堆層的統(tǒng)一視角曹动,唯一區(qū)別在于容器的最上面的那一層是可讀可寫的斋日。這個最上面的一層是以鏡像為基礎(chǔ)層創(chuàng)建的,被稱為容器存儲層墓陈,容器存儲層的生存周期和容器一樣恶守,容器消亡時,容器存儲層也隨之消亡贡必。因此兔港,任何保存于容器存儲層的信息也會隨著容器刪除而丟失。
所以根據(jù)Docker最佳實踐要求仔拟,容器不應該向其向其存儲層內(nèi)寫入任何數(shù)據(jù)押框,容器存儲層要保持無狀態(tài)化。所有的文件寫入操作理逊,都應該使用數(shù)據(jù)卷橡伞、或者綁定宿主目錄,在這些位置的讀寫會跳過容器存儲層晋被,直接對宿主(或網(wǎng)絡(luò)存儲)發(fā)生讀寫兑徘,其性能和穩(wěn)定性更高。
數(shù)據(jù)卷的生存周期獨立于容器羡洛,容器消亡挂脑,數(shù)據(jù)卷不會消亡。因此欲侮,使用數(shù)據(jù)卷后崭闲,容器刪除或者重新運行之后,數(shù)據(jù)卻不會丟失威蕉。

Docker Registry

鏡像構(gòu)建完成后刁俭,可以很容易的在當前宿主機上運行,但是如果需要在其他服務(wù)器上使用這個鏡像韧涨,我們就需要一個集中的存儲牍戚、分發(fā)鏡像的服務(wù)侮繁,Docker Registry就是這樣的服務(wù)。
一個Docker Registry中可以包含多個倉庫(Repository)如孝,每個倉庫可以包含多個標簽(Tag)宪哩,每個標簽對應一個鏡像。
通常第晰,一個倉庫會包含一個軟件不同版本的鏡像锁孟,而標簽就常用與對應該軟件的各個版本。我們可以通過 <倉庫名>:<標簽> 的格式來指定具體是這個軟件哪個版本的鏡像茁瘦。如果不給出標簽品抽,將以latest作為默認標簽。
以Ubuntu鏡像為例腹躁,ubuntu是倉庫的名字,其內(nèi)包含有不同的版本標簽南蓬,如果16.04我們可以通過ubuntu:16.04來制定鏡像纺非。
倉庫名經(jīng)常以兩段式路徑形式出現(xiàn),比如 jwilder/nginx-proxy 赘方,前者往往意味著Docker Registry多用戶環(huán)境下的用戶名烧颖,后者往往是對應的軟件名。但這并非絕對窄陡,取決于所使用的具體Docker Registry的軟件或服務(wù)炕淮。

Docker Registry公開服務(wù)

Docker Registry公開服務(wù)是開放給用戶使用、允許用戶管理鏡像的Registry服務(wù)跳夭。一般這類公開服務(wù)允許用戶免費上傳涂圆、下載公開的鏡像,并可能提供收費服務(wù)用戶管理私有鏡像币叹。
最常使用的Registry公開服務(wù)是官方的Docker Hub润歉,這也是默認的Registry,并擁有大量的高質(zhì)量的官方鏡像颈抚。此外由于某些原因踩衩,在國內(nèi)訪問這些服務(wù)會比較慢,國內(nèi)的一些云服務(wù)商提供了針對Docker Hub的鏡像服務(wù)贩汉,這些鏡像服務(wù)被稱為加速器驱富,常用的有阿里云、網(wǎng)易云匹舞、DaoCloud等褐鸥。

總結(jié)

Docker使用C/S結(jié)構(gòu),Docker客戶端與Docker服務(wù)器進行交互赐稽,Docker服務(wù)端負責構(gòu)建晶疼、運行和分發(fā)Docker鏡像酒贬。Docker客戶端和服務(wù)端可以運行在一臺機器上,也可以通過RESTful翠霍、stock或網(wǎng)絡(luò)接口與遠程Docker服務(wù)端進行通信锭吨。


docker結(jié)構(gòu)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市寒匙,隨后出現(xiàn)的幾起案子零如,更是在濱河造成了極大的恐慌,老刑警劉巖锄弱,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件考蕾,死亡現(xiàn)場離奇詭異,居然都是意外死亡会宪,警方通過查閱死者的電腦和手機肖卧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掸鹅,“玉大人塞帐,你說我怎么就攤上這事∥∩常” “怎么了葵姥?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長句携。 經(jīng)常有香客問我榔幸,道長,這世上最難降的妖魔是什么矮嫉? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任削咆,我火速辦了婚禮,結(jié)果婚禮上蠢笋,老公的妹妹穿的比我還像新娘态辛。我一直安慰自己,他們只是感情好挺尿,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布奏黑。 她就那樣靜靜地躺著,像睡著了一般编矾。 火紅的嫁衣襯著肌膚如雪熟史。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天窄俏,我揣著相機與錄音蹂匹,去河邊找鬼。 笑死凹蜈,一個胖子當著我的面吹牛限寞,可吹牛的內(nèi)容都是我干的忍啸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼履植,長吁一口氣:“原來是場噩夢啊……” “哼计雌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起玫霎,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤凿滤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后庶近,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翁脆,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年鼻种,在試婚紗的時候發(fā)現(xiàn)自己被綠了反番。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡叉钥,死狀恐怖罢缸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沼侣,我是刑警寧澤祖能,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布歉秫,位于F島的核電站蛾洛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏雁芙。R本人自食惡果不足惜轧膘,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望兔甘。 院中可真熱鬧谎碍,春花似錦、人聲如沸洞焙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澡匪。三九已至熔任,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唁情,已是汗流浹背疑苔。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留甸鸟,地道東北人惦费。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓兵迅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親薪贫。 傳聞我的和親對象是個殘疾皇子恍箭,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容