Docker從零到集群(1/3)—Machine,Compose,Swarm

系列目錄

Docker從零到集群(1/3)—Machine,Compose,Swarm
Docker從零到集群(2/3)—Machine,Compose,Swarm
Docker從零到集群(3/3)—Machine,Compose,Swarm

前言

Docker,容器,看似迷你微小的身軀,卻是蘊(yùn)含著龐大的智慧。它的出現(xiàn)去除了復(fù)雜的配置,改變了繁瑣的運(yùn)維,解放了冗余的環(huán)境,讓大規(guī)模的高擴(kuò)展,高可用的集群部署成為一件并不復(fù)雜的事情。
這一篇文章,會(huì)盡可能用簡(jiǎn)單易懂的敘述和快速便捷的操作講解從編寫(xiě)代碼到將其部署在一個(gè)可隨意擴(kuò)展的集群上。國(guó)內(nèi)相關(guān)的資料實(shí)在是太少了,許多的構(gòu)建指南和教程不是太老就是不完整,初學(xué)者很難以入門,尤其是swarm的集群部分,大量的概念沒(méi)有講解清除造成了極大的門檻
我希望這一篇文章是能夠真正涵蓋Docker的所有核心,也希望所有有心的讀者能夠借此踏入微服務(wù)集群領(lǐng)域,嘗試著與傳統(tǒng)單體大型應(yīng)用開(kāi)發(fā)或者傳統(tǒng)分布式應(yīng)用開(kāi)發(fā)不一樣的路

概念

話不多說(shuō),直接先進(jìn)入Docker的核心概念說(shuō)明,Docker與其三劍客分別是:

  • Docker(Image/Container/Registry)
  • Docker Machine
  • Docker Compose
  • Docker Swarm
    掌握以上四個(gè)Docker核心,就可以完成從代碼到集群的部署,不過(guò)看似簡(jiǎn)單,學(xué)習(xí)起來(lái)其實(shí)還是有一些曲線的,我自己總結(jié)了許久,以下的學(xué)習(xí)路線也許入門會(huì)比較輕松

總覽

Docker(Image/Container/Registry)

首先是Docker的3個(gè)最基本的核心概念,基礎(chǔ)中的基礎(chǔ),那就是Image鏡像,Container容器,Registry倉(cāng)庫(kù)。
Image鏡像的概念就是容器運(yùn)行時(shí)需要的所有程序,文件,參數(shù)等的集合體,每一個(gè)鏡像可以理解為一個(gè)應(yīng)用程序的完整體。
Container容器的概念就是運(yùn)行起來(lái)的鏡像。說(shuō)到這里,我們其實(shí)可以對(duì)比程序和進(jìn)程的概念,程序是存儲(chǔ)在硬盤上的文件,所謂進(jìn)程就是被加載內(nèi)存里運(yùn)行的程序。鏡像和容器是一個(gè)道理,沒(méi)有什么深?yuàn)W的
Registry倉(cāng)庫(kù)的概念就是鏡像的集合,倉(cāng)庫(kù)里每個(gè)鏡像都可以有自己的標(biāo)簽,版本等,通過(guò)倉(cāng)庫(kù),就可以很輕松下載需要的鏡像

好的,說(shuō)到這里,可以串起來(lái)講一下Docker的概念,Docker其實(shí)并不是傳統(tǒng)意義上的虛擬機(jī), 它并不是在宿主機(jī)上新建立一個(gè)虛擬機(jī)。Docker之所以能類似虛擬機(jī)一樣有隔離獨(dú)立操作系統(tǒng)空間,根本上因?yàn)長(zhǎng)inux內(nèi)核支持的隔離技術(shù)(在此不展開(kāi),操作系統(tǒng)內(nèi)核技術(shù)不在本文討論范圍內(nèi)),所以非Linux系統(tǒng),都是沒(méi)有辦法直接運(yùn)行Docker的,只能通過(guò)其他辦法中轉(zhuǎn)

可以說(shuō)也是因?yàn)镈ocker吧,Linux的地位可謂是又上了一層樓,學(xué)習(xí)Docker最好的辦法是用Linux系統(tǒng),當(dāng)然Windows和Mac OS X也可以,就是需要安裝其他工具輔助運(yùn)行

最后再說(shuō)一下Docker本身的文件系統(tǒng)是分層的,當(dāng)你下載了一個(gè)基礎(chǔ)鏡像后,對(duì)這個(gè)鏡像進(jìn)行安裝工具,應(yīng)用,或者是設(shè)置環(huán)境變量等等,其實(shí)都是在這個(gè)鏡像的基礎(chǔ)進(jìn)行增量文件寫(xiě)入。這也就解釋了很多人的困惑,為什么一個(gè)linux系統(tǒng)再小也得好幾百M(fèi)B,甚至上幾GB的大小,但是有時(shí)候一個(gè)Docker的操作系統(tǒng)鏡像才幾十MB甚至十幾MB。因?yàn)镈ocker的鏡像并不是完整的操作系統(tǒng)鏡像,并不會(huì)包含操作系統(tǒng)所有的文件。Docker使用的都是Linux的內(nèi)核,不同的Linux發(fā)行版本用的也都是Linux內(nèi)核,只是安裝的軟件工具不同而已。所以不同的Docker操作系統(tǒng)鏡像,其本質(zhì)的不同就是他們的Dockerfile上的安裝軟件工具的不同

Docker Machine

很多人會(huì)把Docker Machine和Docker弄混,其實(shí)Docker Machine只是安裝Docker環(huán)境的工具,而且這就真的是一個(gè)虛擬機(jī)工具了。因?yàn)椴煌腖inux發(fā)行版太多了,而且還有Windows和Mac OS X等操作系統(tǒng),要是大量不同機(jī)器,而且操作系統(tǒng)參次不齊,那光是安裝Docker就足夠累死了。所以Docker Machine應(yīng)運(yùn)而生,Docker Machine可以通過(guò)命令快速創(chuàng)建帶有Docker環(huán)境的虛擬機(jī),然后在這個(gè)虛擬機(jī)里面,就可以快速地部署Docker容器了

Docker Compose

如果說(shuō)Docker是應(yīng)用環(huán)境安裝腳本的集合,那么Dcoker Compose就是Docker啟動(dòng)運(yùn)行腳本的集合,因?yàn)槭褂肈ocker命令定制化地啟動(dòng)一個(gè)鏡像容器,命令很長(zhǎng)而且不好記憶,每個(gè)容器都要輸入命令也繁瑣,容器數(shù)量一大,會(huì)累死,所以Docker Compose就誕生了,一個(gè)yml的腳本文件,就搞定

Docker Swarm

通過(guò)Docker Machine我們創(chuàng)建啟動(dòng)了帶有Docker環(huán)境的虛擬機(jī),然后通過(guò)Docker Compose我們?cè)谔摂M機(jī)上啟動(dòng)運(yùn)行了Dcoker,但是這些都僅僅是啟動(dòng)運(yùn)行了一個(gè)鏡像容器,和傳統(tǒng)單機(jī)應(yīng)用也沒(méi)啥區(qū)別,而且傳統(tǒng)的好像也沒(méi)這么麻煩。這時(shí)候,Docker的終極目標(biāo)Docker Swarm就上場(chǎng)了,通過(guò)Docker Swarm,就可以通過(guò)僅僅幾個(gè)命令將大量的機(jī)器創(chuàng)建成一個(gè)集群,然后在這個(gè)集群里面的每臺(tái)機(jī)器上都運(yùn)行部署指定的鏡像容器!所有的鏡像容器組成的集群,對(duì)外就像一臺(tái)機(jī)器一樣,沒(méi)有任何區(qū)別,全自動(dòng)的負(fù)載均衡,全自動(dòng)的容災(zāi)處理。這一些以前需要專業(yè)運(yùn)維團(tuán)隊(duì)長(zhǎng)時(shí)間工作才能完成的事情,如今一個(gè)人一天就可以完成,而且非常輕松!這是傳統(tǒng)單機(jī)應(yīng)用甚至是傳統(tǒng)分布式應(yīng)用無(wú)法匹及的,所以Docker為微服務(wù)架構(gòu)打下基礎(chǔ),引領(lǐng)新一輪軟件工程革命是毫不夸張的

后記

以上就是Docker的核心概念,將其所有概念串起來(lái),我們可以得到從零開(kāi)始到構(gòu)建一個(gè)集群系統(tǒng)的基本思路:

  1. 通過(guò)Docker將應(yīng)用的運(yùn)行環(huán)境,和代碼本身打包成為一個(gè)完整的鏡像(Image)

  2. 通過(guò)容器(Container)運(yùn)行生成的鏡像,就相當(dāng)于運(yùn)行了應(yīng)用

  3. 通過(guò)上傳生成的鏡像到倉(cāng)庫(kù)(Registry),可以云端持久化鏡像,在我們需要的時(shí)候下載以容器運(yùn)行,就可以得到了一個(gè)理論上能在任何系統(tǒng)運(yùn)行的應(yīng)用體,無(wú)須關(guān)心任何的配置和環(huán)境,一次構(gòu)建,隨處運(yùn)行

  4. 通過(guò)以上步驟,我們可以得到一個(gè)存儲(chǔ)在云端,能隨時(shí)下載運(yùn)行的鏡像,但是通過(guò)Docker的命令參數(shù)運(yùn)行容器,是比較冗余麻煩的,尤其是在容器數(shù)量比較多的情況下。這時(shí)候我們需要利用Docker Comopse編寫(xiě)一個(gè)yml文件,使用一個(gè)簡(jiǎn)單的命令執(zhí)行這個(gè)配置文件,我們則可以迅速運(yùn)行yml文件所有配置好的所有容器服務(wù)

  5. 因?yàn)镈ocker的安裝在不同的系統(tǒng)安裝不同,為了簡(jiǎn)化Docker環(huán)境的部署,引入Dokcer Machine,通過(guò)它創(chuàng)建一個(gè)帶有Docker環(huán)境的虛擬機(jī),在這個(gè)虛擬機(jī)里可以直接使用Dokcer

  6. 通過(guò)以上,我們完成了單機(jī)Dokcer配置運(yùn)行所有的工作,我們可以完美地在單機(jī)上創(chuàng)建部署運(yùn)行多個(gè)容器,讓其相互關(guān)聯(lián)工作。但是單機(jī)應(yīng)用在訪問(wèn)量大時(shí),是無(wú)法支撐的。這個(gè)時(shí)候我們就需要通過(guò)Docker Swarm,將多臺(tái)主機(jī)組成一個(gè)集群,然后創(chuàng)建可伸縮的服務(wù),每個(gè)服務(wù)的基礎(chǔ)是一個(gè)鏡像容器,這個(gè)服務(wù)會(huì)根據(jù)設(shè)定好的數(shù)量,自動(dòng)分發(fā)到每臺(tái)服務(wù)主機(jī)上,且數(shù)量可隨意調(diào)節(jié)。不同的主機(jī)會(huì)被構(gòu)建在一個(gè)網(wǎng)絡(luò)中,對(duì)外部而言,就像是一臺(tái)主機(jī)一樣,集群會(huì)自動(dòng)負(fù)載均衡

后續(xù)

至此,就是Docker構(gòu)建集群的基本思路,限于篇幅,本文只闡述Docker的核心概念和簡(jiǎn)單說(shuō)明集群的構(gòu)建思路。整個(gè)Docker系列文章預(yù)計(jì)會(huì)有三篇,后續(xù)兩篇會(huì)一步步闡述如何真實(shí)構(gòu)建單機(jī)Docker應(yīng)用系統(tǒng)和如何構(gòu)建一個(gè)可伸縮的Dokcer集群系統(tǒng),所以,未完待續(xù)...

感謝你的閱讀,希望本文能夠給你帶來(lái)幫助

作者:CheneyXu
關(guān)于:XServer官網(wǎng)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評(píng)論 6 535
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,740評(píng)論 3 420
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,856評(píng)論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,175評(píng)論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,931評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,321評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評(píng)論 3 443
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,533評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,082評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,891評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,067評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,319評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,732評(píng)論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,987評(píng)論 1 289
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,794評(píng)論 3 394
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,076評(píng)論 2 375

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

  • Docker — 云時(shí)代的程序分發(fā)方式 要說(shuō)最近一年云計(jì)算業(yè)界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,567評(píng)論 15 147
  • 總有一些傻逼阻礙生活前進(jìn)的步伐,包括我自己。你們都跟我一樣的傻逼。1塊錢真能秒殺寶馬車?2塊錢彩票真會(huì)中?3天不聯(lián)...
    11樓不算高閱讀 341評(píng)論 0 1
  • 誰(shuí)都曾面對(duì)生活痛苦猶疑,誰(shuí)都會(huì)有不上臺(tái)面的時(shí)光,那一點(diǎn)也不丟人。別人的生活沒(méi)有你想像的好,你的生活也沒(méi)有自己以為的...
    吳氵晃閱讀 296評(píng)論 0 1
  • 端午期間,親家不運(yùn)萬(wàn)里捎來(lái)粽子,皮蛋……。皮蛋獨(dú)有特色: 松花皮蛋松花朵, 內(nèi)層夾心似琥珀。 清涼甘甜鮮味美, 萬(wàn)...
    噴泉閱讀 392評(píng)論 0 4