Docker介紹一

1. 單體、集群谨湘、微服務(wù)

1.1 web開發(fā)中的三層架構(gòu):

  • 持久層:用于和數(shù)據(jù)庫(kù)交互
  • 業(yè)務(wù)邏輯層:從持久層獲取數(shù)據(jù)谚鄙,為API層服務(wù)各拷;
  • API層咧织,接收用戶請(qǐng)求省艳,調(diào)用業(yè)務(wù)層進(jìn)行數(shù)據(jù)的操作逛犹,并且返回響應(yīng)八回。
    單機(jī)架構(gòu):將系統(tǒng)的三層部署到同一臺(tái)服務(wù)器放航,稱為單機(jī)架構(gòu)艰管。隨著流量的增加途乃,只能通過CPU及內(nèi)存增加來進(jìn)行擴(kuò)容乖仇。

1.2 單體架構(gòu)缺點(diǎn)

  • 模塊耦合度過高娘赴,一個(gè)故障全故障规哲,一個(gè)升級(jí)需要全升級(jí);
  • 開發(fā)困難诽表,各個(gè)團(tuán)隊(duì)開發(fā)到最后都需要整合在一起唉锌,需要具備相同的技術(shù)棧;
  • 可拓展性差竿奏,需要調(diào)用其中一個(gè)模塊是較為復(fù)雜袄简。

由于單機(jī)處理能力有限,當(dāng)業(yè)務(wù)增長(zhǎng)到一定程度時(shí)泛啸,單機(jī)的硬件資源無法支撐業(yè)務(wù)量绿语,此時(shí)出現(xiàn)集群模式

1.3 集群

  • 單機(jī)處理達(dá)到瓶頸平痰,將單機(jī)復(fù)制汞舱,構(gòu)成一個(gè)集群。集群中每臺(tái)服務(wù)器稱為一個(gè)節(jié)點(diǎn)宗雇,每個(gè)節(jié)點(diǎn)提供相同的服務(wù)昂芜;

  • 集群需要一個(gè)負(fù)載均衡器;


    負(fù)載均衡器
  • 集群的優(yōu)缺點(diǎn):

    • 缺點(diǎn):便于拓展赔蒲;
    • 優(yōu)點(diǎn):對(duì)于上萬的高并發(fā)泌神,即使增加節(jié)點(diǎn)數(shù),性能也沒有明顯的提升舞虱。

1.4 分布式

分布式架構(gòu)欢际,將業(yè)務(wù)按照功能拆分成一個(gè)個(gè)獨(dú)立的子系統(tǒng),將各個(gè)子系統(tǒng)(服務(wù))部署在不同的服務(wù)器矾兜,且各個(gè)分開部署的部分彼此通過各種通訊協(xié)議進(jìn)行交互损趋。訪問業(yè)務(wù)需要使用通過API Geteway進(jìn)行訪問。


API Geteway
  • 分布式優(yōu)點(diǎn):
    1. 系統(tǒng)間耦合度大大降低椅寺,可以獨(dú)立開發(fā)浑槽、獨(dú)立部署蒋失、獨(dú)立測(cè)試、系統(tǒng)間邊界明確桐玻,排錯(cuò)簡(jiǎn)單篙挽,開發(fā)效率提升;
    2. 易于拓展镊靴;
    3. 復(fù)用性高:比如铣卡,當(dāng)我們將用戶系統(tǒng)作為單獨(dú)的服務(wù)后,該公司所有的產(chǎn)品都可以使用該系統(tǒng)作為用戶系統(tǒng)偏竟,無需重復(fù)開發(fā)煮落。

1.5 微服務(wù)

微服務(wù)將模塊拆分稱為一個(gè)獨(dú)立的服務(wù)單元通過接口來實(shí)現(xiàn)數(shù)據(jù)的交互。微服務(wù)的設(shè)計(jì)是為了不因?yàn)槟硞€(gè)模塊的升級(jí)和BUG影響現(xiàn)有的系統(tǒng)業(yè)務(wù)苫耸。

  • 微服務(wù)特點(diǎn):
    1. 模塊拆分為獨(dú)立的工程州邢,使用接口通信儡陨,降低服務(wù)之間的耦合度褪子;
    2. 不同服務(wù)拆分為不同的子項(xiàng)目,不同團(tuán)隊(duì)負(fù)責(zé)不同的子項(xiàng)目骗村;
    3. 需要增加功能時(shí)只需增加一個(gè)子項(xiàng)目嫌褪,調(diào)用其他系統(tǒng)接口即可;
    4. 可以靈活的進(jìn)行分布式部署胚股。

1.6 集群笼痛、分布式、微服務(wù)的區(qū)別

  1. 集群:多臺(tái)服務(wù)器部署相同應(yīng)用構(gòu)成集群琅拌,利用硬件有事支撐訪問量過高的應(yīng)用缨伊;

作用:通過負(fù)載均衡設(shè)備共同對(duì)外提供服務(wù)。

  1. 分布式:不同模塊部署在不同服務(wù)器进宝,對(duì)系統(tǒng)的水平拓展刻坊,分散單個(gè)服務(wù)器壓力;

作用:分布式解決網(wǎng)站高并發(fā)帶來的問題党晋。

  1. 微服務(wù):對(duì)系統(tǒng)進(jìn)行更細(xì)粒度的拆分谭胚,側(cè)重模塊解耦和復(fù)用,不同的微服務(wù)不一定部署到不同服務(wù)器上未玻。微服務(wù)是使系統(tǒng)各個(gè)功能拆分更加精細(xì)和獨(dú)立的垂直拓展。

總結(jié):

  • 微服務(wù)多數(shù)是分布式的扳剿,但分布式項(xiàng)目不一定是微服務(wù)架構(gòu);
  • 集群和分布式是分散壓力庇绽,而微服務(wù)是分散能力癣猾;
  • 分布式一定是多個(gè)服務(wù)器余爆,而微服務(wù)一個(gè)或者多個(gè)都可以。

2. 容器及虛擬化技術(shù)

2.1 容器技術(shù)起源

微服務(wù)架構(gòu)本質(zhì)是一個(gè)分布式系統(tǒng)蛾方。開發(fā)復(fù)雜像捶,部署復(fù)雜(需要部署的應(yīng)用數(shù)量從一個(gè)上升至幾個(gè)甚至幾十個(gè))。若在運(yùn)維方面沒有大的進(jìn)展桩砰,微服務(wù)架構(gòu)不能得到廣泛應(yīng)用拓春。容器化技術(shù)的出現(xiàn),為系統(tǒng)運(yùn)維帶來了新的可能性亚隅,微服務(wù)架構(gòu)應(yīng)用的部署離不開容器化技術(shù)硼莽。

2.2 應(yīng)用部署的發(fā)展

應(yīng)用部署的發(fā)展

2.3虛擬化

  • 寄居虛擬化
    安裝在操作系統(tǒng)之上,虛擬機(jī)對(duì)各種物理設(shè)備(cpu 內(nèi)存 硬盤等)的調(diào)用煮纵,均通過VMM層和宿主機(jī)的操作系統(tǒng)一起協(xié)調(diào)完成懂鸵。(VMware及VirtualBox均采用該方式)


    寄居虛擬化.png
  • 裸機(jī)虛擬化
    直接將VMM安裝在硬件設(shè)備與物理硬件之間,MM在這種模式下亦可稱為Hypervisor行疏,虛擬機(jī)要執(zhí)行指令時(shí)匆光,Hypervisor接管,模擬相應(yīng)的操作酿联。


    裸機(jī)虛擬化.png

2.4 容器技術(shù)

容器是對(duì)進(jìn)程進(jìn)行隔離终息,屬于操作系統(tǒng)層面的虛擬化技術(shù)。由于隔離的進(jìn)程獨(dú)立于宿主和其他隔離進(jìn)程贞让,因此稱其為容器周崭。簡(jiǎn)單的說,一個(gè)容器包含了完整的運(yùn)行環(huán)境:除運(yùn)行程序本身外喳张,這個(gè)應(yīng)用所需的全部依賴续镇、類庫(kù)、二進(jìn)制文件蹲姐、配置文件等磨取,都被統(tǒng)一打入了一個(gè)稱為容器鏡像的包中。

2.4 容器及虛擬機(jī)對(duì)比

建議采用容器:容器技術(shù)比虛擬機(jī)技術(shù)更為輕便柴墩、快捷忙厌。

容器及虛擬機(jī).png

2.5 容器部署方式

容器提供了一種更為簡(jiǎn)潔的方式,容器鏡像包含代碼以及代碼運(yùn)行所依賴的全部江咳。

  • 開發(fā)交付的是可直接運(yùn)行的鏡像逢净,而不是代碼安裝包;
  • 應(yīng)用交付團(tuán)隊(duì)只需從鏡像創(chuàng)建容器的并運(yùn)行;
  • 運(yùn)維只需管理運(yùn)行容器的基礎(chǔ)設(shè)施和容器的運(yùn)行爹土。


    容器化部署方式

2.5 容器的優(yōu)勢(shì)

  • 環(huán)境一致甥雕,便于排錯(cuò)社露;
  • 相比虛擬機(jī)更加輕量級(jí)峭弟;
  • 秒級(jí)響應(yīng)瞒瘸,出現(xiàn)問題可以快速回滾情臭;
  • 可保證程序AlwaysRunning,傳統(tǒng)虛擬機(jī)OS上需要執(zhí)行相應(yīng)腳本俯在。

3.Docker

  • Docker是一個(gè)開源項(xiàng)目惯雳,誕生于2013年初石景,由dotCloud公司一個(gè)內(nèi)部項(xiàng)目潮孽】昵基于Go語(yǔ)言實(shí)現(xiàn)佛舱。項(xiàng)目代碼在此
  • Docker的目標(biāo)是實(shí)現(xiàn)輕量級(jí)的操作系統(tǒng)虛擬化解決方案订歪。其基礎(chǔ)為L(zhǎng)inux容器(LXC)等技術(shù)刷晋。
  • 用戶操作Docker就像操作一個(gè)快速輕量級(jí)的虛擬機(jī)一樣簡(jiǎn)單眼虱。

3.1 倉(cāng)庫(kù)、鏡像撞蚕、容器

  • 倉(cāng)庫(kù)(registry):存放鏡像的地方诈豌,Docker公司運(yùn)營(yíng)公共的Registry叫做Docker Hub
  • 鏡像:構(gòu)建Docker的基石矫渔,用戶基于鏡像來運(yùn)行自己的容器庙洼。通過鏡像創(chuàng)建Docker容器油够。
  • 容器:Docker利用容器來運(yùn)行應(yīng)用石咬。容器是從鏡像創(chuàng)建的運(yùn)行實(shí)例卖哎,可以被啟動(dòng)亏娜、開始维贺、停止、刪除虐秋。鏡像是Docker生命周期中的構(gòu)建或者打包階段客给,而容器則是啟動(dòng)或者執(zhí)行階段起愈。容器基于鏡像啟動(dòng),一旦容器啟動(dòng)完成后官觅,我們就可以登錄到容器中安裝自己需要的軟件或者服務(wù)休涤。

3.2 Docker安裝

yum install docker# 安裝
systemcrl start/restart/stop docker # 啟動(dòng)功氨、重啟捷凄、關(guān)閉Docker
systemctl status docker # 查看Docker狀態(tài)
docker info # 查看Docker概要信息
docker version # 查看Docker版本信息
``

3.3 鏡像操作

docker images # 查看本地鏡像
docker search mysql # 搜索鏡像
docker pull centos:7 # 拉取鏡像
docker push image_name # 上傳鏡像
docker rmi image_name/id # 刪除鏡像
docker inspect image_name/container_name # 查看鏡像跺涤、容器詳細(xì)信息

3.4 容器操作

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS:
-i 表示交互式监透;
-t 表示容器登錄后進(jìn)入其命令行參數(shù)胀蛮,加入這兩個(gè)參數(shù)后,容器創(chuàng)建后就能登錄進(jìn)去退腥;
-v 表示目錄映射(前者是宿主機(jī)目錄絕對(duì)路徑,后者是容器內(nèi)目錄路徑)不跟,tips:可以多做幾個(gè)目錄或文件映射窝革。一般在宿主機(jī)上修改虐译,然后共享到容器上漆诽;
-p 表示端口映射(前者是宿主機(jī)端口厢拭、后者是容器內(nèi)映射端口)可以多做幾個(gè)端口映射
-d 在run后面加上-d參數(shù),則會(huì)創(chuàng)建一個(gè)守護(hù)式容器在后臺(tái)運(yùn)行(這樣創(chuàng)建容器后不會(huì)自動(dòng)登錄容器供鸠,如果只加-i -t兩個(gè)參數(shù)楞捂,創(chuàng)建后就會(huì)自動(dòng)進(jìn)去容器)胶坠。
ARG:
--name 為創(chuàng)建的容器命名
--rm 容器終止后會(huì)立刻刪除涵但,和-d參數(shù)不能同時(shí)使用

3.4.1 常見命令

docker run -d image_name|鏡像id:tag # 后臺(tái)啟動(dòng)容器矮瘟、創(chuàng)建守護(hù)式進(jìn)程
docker exec -it container_id|container_name /bin/bash # 進(jìn)入容器塑娇、登錄守護(hù)式容器
docker run -it --name=container_name image_id|image_name:tag # 啟動(dòng)容器并進(jìn)入哨啃,創(chuàng)建交互式容器
exit # 退出當(dāng)前容器
docker ps # 查看運(yùn)行容器
docker ps -a # 查看所有容器

查看容器

docker start container_id|container_name # 啟動(dòng)停止的容器
docker stop container_id|container_name # 停止容器
docker rm container_id|container_name # 刪除停止的容器

4.MySQL容器部署

4.1 宿主機(jī)和容器之間復(fù)制文件

docker cp host_machine_file_pathcontainer_name:path # 宿主機(jī)復(fù)制文件到容器
docker cp container_name:file_path host_machine_file_path # 復(fù)制容器中文件到宿主機(jī)

4.2 MySQL部署

  • docker pull mysql:5.7 # 拉取MySQL5.7
  • docker run -d --name -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 # 創(chuàng)建容器
  • docker exec -it mysql /bin/bash # 登錄mysql容器
  • mysql -uroot -p123456 database_name # 進(jìn)入database_name數(shù)據(jù)庫(kù)

5.centos部署

  • docker pull centos # 拉取centos:latest
  • docker run -d --name centos centos ping www.baidu.com # 創(chuàng)建容器
  • docker exec -it centos /bin/bash # 登錄centos容器
    注意:第二條命令末尾加一個(gè)死循環(huán),本例使用了ping
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末祝峻,一起剝皮案震驚了整個(gè)濱河市莱找,隨后出現(xiàn)的幾起案子奥溺,更是在濱河造成了極大的恐慌浮定,老刑警劉巖桦卒,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悯辙,死亡現(xiàn)場(chǎng)離奇詭異躲撰,居然都是意外死亡击费,警方通過查閱死者的電腦和手機(jī)蔫巩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門垃瞧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來个从,“玉大人,你說我怎么就攤上這事歪沃∴氯瘢” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵沪曙,是天一觀的道長(zhǎng)奕污。 經(jīng)常有香客問我,道長(zhǎng)液走,這世上最難降的妖魔是什么碳默? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮育灸,結(jié)果婚禮上腻窒,老公的妹妹穿的比我還像新娘磅崭。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布惠爽。 她就那樣靜靜地躺著较性,像睡著了一般。 火紅的嫁衣襯著肌膚如雪院仿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天痒留,我揣著相機(jī)與錄音,去河邊找鬼野宜。 笑死虎敦,一個(gè)胖子當(dāng)著我的面吹牛擂橘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼轨功,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了柒昏?” 一聲冷哼從身側(cè)響起削葱,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤陨囊,失蹤者是張志新(化名)和其女友劉穎压语,沒想到半個(gè)月后厕怜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年搞糕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片婚陪。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖咐柜,靈堂內(nèi)的尸體忽然破棺而出拙友,到底是詐尸還是另有隱情病曾,我是刑警寧澤从绘,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站翩伪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏侠仇。R本人自食惡果不足惜轻姿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逻炊。 院中可真熱鬧互亮,春花似錦、人聲如沸余素。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)桨吊。三九已至威根,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間视乐,已是汗流浹背洛搀。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炊林,地道東北人姥卢。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親独榴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子僧叉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

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

  • 官網(wǎng):https://www.docker.com/docker倉(cāng)庫(kù):https://hub.docker.com...
    陳超同學(xué)閱讀 374評(píng)論 0 0
  • 1 Docker介紹 1.1 Docker介紹 1.1.1 容器歷史 早期的容器基于Linux的LXC工作. 可以...
    隨便寫寫咯閱讀 394評(píng)論 0 1
  • Docker概述 Docker 使用 Google 公司推出的 Go 語(yǔ)言 進(jìn)行開發(fā)實(shí)現(xiàn),基于 Linux 內(nèi)核的...
    狠毒一閱讀 308評(píng)論 0 0
  • 一棺榔、Docker簡(jiǎn)介 ??Docker 是一個(gè)開源的應(yīng)用容器引擎瓶堕,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植...
    無劍_君閱讀 257評(píng)論 0 1
  • 一、什么是docker Docker 是一個(gè)開源的應(yīng)用容器引擎症歇,基于 Go 語(yǔ)言 并遵從Apache2.0協(xié)議開源...
    林皮皮s閱讀 1,326評(píng)論 0 5