系列目錄
Docker從零到集群(1/3)—Machine,Compose,Swarm
Docker從零到集群(2/3)—Machine,Compose,Swarm
Docker從零到集群(3/3)—Machine,Compose,Swarm
前言
Docker,容器,看似迷你微小的身軀辈双,卻是蘊含著龐大的智慧。它的出現(xiàn)去除了復雜的配置抖拦,改變了繁瑣的運維刹枉,解放了冗余的環(huán)境檬洞,讓大規(guī)模的高擴展荡陷,高可用的集群部署成為一件并不復雜的事情雨效。
這一篇文章,會盡可能用簡單易懂的敘述和快速便捷的操作講解從編寫代碼到將其部署在一個可隨意擴展的集群上废赞。國內(nèi)相關的資料實在是太少了徽龟,許多的構建指南和教程不是太老就是不完整,初學者很難以入門唉地,尤其是swarm的集群部分据悔,大量的概念沒有講解清除造成了極大的門檻
我希望這一篇文章是能夠真正涵蓋Docker的所有核心,也希望所有有心的讀者能夠借此踏入微服務集群領域耘沼,嘗試著與傳統(tǒng)單體大型應用開發(fā)或者傳統(tǒng)分布式應用開發(fā)不一樣的路
概念
話不多說极颓,直接先進入Docker的核心概念說明,Docker與其三劍客分別是:
- Docker(Image/Container/Registry)
- Docker Machine
- Docker Compose
- Docker Swarm
掌握以上四個Docker核心耕拷,就可以完成從代碼到集群的部署讼昆,不過看似簡單,學習起來其實還是有一些曲線的骚烧,我自己總結了許久,以下的學習路線也許入門會比較輕松
總覽
Docker(Image/Container/Registry)
首先是Docker的3個最基本的核心概念闰围,基礎中的基礎赃绊,那就是Image鏡像,Container容器羡榴,Registry倉庫碧查。
Image鏡像的概念就是容器運行時需要的所有程序,文件,參數(shù)等的集合體忠售,每一個鏡像可以理解為一個應用程序的完整體传惠。
Container容器的概念就是運行起來的鏡像。說到這里稻扬,我們其實可以對比程序和進程的概念卦方,程序是存儲在硬盤上的文件,所謂進程就是被加載內(nèi)存里運行的程序泰佳。鏡像和容器是一個道理盼砍,沒有什么深奧的
Registry倉庫的概念就是鏡像的集合,倉庫里每個鏡像都可以有自己的標簽逝她,版本等浇坐,通過倉庫,就可以很輕松下載需要的鏡像
好的黔宛,說到這里近刘,可以串起來講一下Docker的概念,Docker其實并不是傳統(tǒng)意義上的虛擬機臀晃, 它并不是在宿主機上新建立一個虛擬機跌宛。Docker之所以能類似虛擬機一樣有隔離獨立操作系統(tǒng)空間,根本上因為Linux內(nèi)核支持的隔離技術(在此不展開积仗,操作系統(tǒng)內(nèi)核技術不在本文討論范圍內(nèi))疆拘,所以非Linux系統(tǒng),都是沒有辦法直接運行Docker的寂曹,只能通過其他辦法中轉
可以說也是因為Docker吧哎迄,Linux的地位可謂是又上了一層樓,學習Docker最好的辦法是用Linux系統(tǒng)隆圆,當然Windows和Mac OS X也可以漱挚,就是需要安裝其他工具輔助運行
最后再說一下Docker本身的文件系統(tǒng)是分層的,當你下載了一個基礎鏡像后渺氧,對這個鏡像進行安裝工具旨涝,應用,或者是設置環(huán)境變量等等侣背,其實都是在這個鏡像的基礎進行增量文件寫入白华。這也就解釋了很多人的困惑,為什么一個linux系統(tǒng)再小也得好幾百MB贩耐,甚至上幾GB的大小弧腥,但是有時候一個Docker的操作系統(tǒng)鏡像才幾十MB甚至十幾MB。因為Docker的鏡像并不是完整的操作系統(tǒng)鏡像潮太,并不會包含操作系統(tǒng)所有的文件管搪。Docker使用的都是Linux的內(nèi)核虾攻,不同的Linux發(fā)行版本用的也都是Linux內(nèi)核,只是安裝的軟件工具不同而已更鲁。所以不同的Docker操作系統(tǒng)鏡像霎箍,其本質的不同就是他們的Dockerfile上的安裝軟件工具的不同
Docker Machine
很多人會把Docker Machine和Docker弄混,其實Docker Machine只是安裝Docker環(huán)境的工具澡为,而且這就真的是一個虛擬機工具了漂坏。因為不同的Linux發(fā)行版太多了,而且還有Windows和Mac OS X等操作系統(tǒng)缀壤,要是大量不同機器樊拓,而且操作系統(tǒng)參次不齊,那光是安裝Docker就足夠累死了塘慕。所以Docker Machine應運而生筋夏,Docker Machine可以通過命令快速創(chuàng)建帶有Docker環(huán)境的虛擬機,然后在這個虛擬機里面图呢,就可以快速地部署Docker容器了
Docker Compose
如果說Docker是應用環(huán)境安裝腳本的集合条篷,那么Dcoker Compose就是Docker啟動運行腳本的集合,因為使用Docker命令定制化地啟動一個鏡像容器蛤织,命令很長而且不好記憶赴叹,每個容器都要輸入命令也繁瑣,容器數(shù)量一大指蚜,會累死乞巧,所以Docker Compose就誕生了,一個yml的腳本文件摊鸡,就搞定
Docker Swarm
通過Docker Machine我們創(chuàng)建啟動了帶有Docker環(huán)境的虛擬機绽媒,然后通過Docker Compose我們在虛擬機上啟動運行了Dcoker,但是這些都僅僅是啟動運行了一個鏡像容器免猾,和傳統(tǒng)單機應用也沒啥區(qū)別是辕,而且傳統(tǒng)的好像也沒這么麻煩。這時候猎提,Docker的終極目標Docker Swarm就上場了获三,通過Docker Swarm,就可以通過僅僅幾個命令將大量的機器創(chuàng)建成一個集群锨苏,然后在這個集群里面的每臺機器上都運行部署指定的鏡像容器疙教!所有的鏡像容器組成的集群,對外就像一臺機器一樣蚓炬,沒有任何區(qū)別松逊,全自動的負載均衡,全自動的容災處理肯夏。這一些以前需要專業(yè)運維團隊長時間工作才能完成的事情,如今一個人一天就可以完成,而且非常輕松驯击!這是傳統(tǒng)單機應用甚至是傳統(tǒng)分布式應用無法匹及的烁兰,所以Docker為微服務架構打下基礎,引領新一輪軟件工程革命是毫不夸張的
后記
以上就是Docker的核心概念徊都,將其所有概念串起來沪斟,我們可以得到從零開始到構建一個集群系統(tǒng)的基本思路:
通過Docker將應用的運行環(huán)境,和代碼本身打包成為一個完整的鏡像(Image)
通過容器(Container)運行生成的鏡像暇矫,就相當于運行了應用
通過上傳生成的鏡像到倉庫(Registry)主之,可以云端持久化鏡像,在我們需要的時候下載以容器運行李根,就可以得到了一個理論上能在任何系統(tǒng)運行的應用體槽奕,無須關心任何的配置和環(huán)境,一次構建房轿,隨處運行
通過以上步驟粤攒,我們可以得到一個存儲在云端,能隨時下載運行的鏡像囱持,但是通過Docker的命令參數(shù)運行容器夯接,是比較冗余麻煩的,尤其是在容器數(shù)量比較多的情況下纷妆。這時候我們需要利用Docker Comopse編寫一個yml文件盔几,使用一個簡單的命令執(zhí)行這個配置文件,我們則可以迅速運行yml文件所有配置好的所有容器服務
因為Docker的安裝在不同的系統(tǒng)安裝不同掩幢,為了簡化Docker環(huán)境的部署逊拍,引入Dokcer Machine,通過它創(chuàng)建一個帶有Docker環(huán)境的虛擬機粒蜈,在這個虛擬機里可以直接使用Dokcer
通過以上顺献,我們完成了單機Dokcer配置運行所有的工作,我們可以完美地在單機上創(chuàng)建部署運行多個容器枯怖,讓其相互關聯(lián)工作注整。但是單機應用在訪問量大時,是無法支撐的度硝。這個時候我們就需要通過Docker Swarm肿轨,將多臺主機組成一個集群,然后創(chuàng)建可伸縮的服務蕊程,每個服務的基礎是一個鏡像容器椒袍,這個服務會根據(jù)設定好的數(shù)量,自動分發(fā)到每臺服務主機上藻茂,且數(shù)量可隨意調節(jié)驹暑。不同的主機會被構建在一個網(wǎng)絡中玫恳,對外部而言,就像是一臺主機一樣优俘,集群會自動負載均衡
后續(xù)
至此京办,就是Docker構建集群的基本思路,限于篇幅帆焕,本文只闡述Docker的核心概念和簡單說明集群的構建思路惭婿。整個Docker系列文章預計會有三篇,后續(xù)兩篇會一步步闡述如何真實構建單機Docker應用系統(tǒng)和如何構建一個可伸縮的Dokcer集群系統(tǒng)叶雹,所以财饥,未完待續(xù)...
感謝你的閱讀,希望本文能夠給你帶來幫助
作者:CheneyXu
關于:XServer官網(wǎng)