Docker入門,Part3:服務(wù)

要求

  • Docker安裝版本在1.13或以上
  • 安裝Docker Compose赁豆。如果是安裝的Docker for Mac和Docker for Windows冗美,那么Docker Compose會一起安裝。在Linux系統(tǒng)上需要直接進行安裝粉洼。如果是在不支持Hyper-v的Windows10以前的操作系統(tǒng),可以使用Docker Toolbox進行安裝
  • 已完成Docker入門,Part1的閱讀學(xué)習(xí)
  • 學(xué)會如何創(chuàng)建容器属韧,完成Docker入門,Part2的學(xué)習(xí)
  • 確保已根據(jù)Docker入門去扣,Part2的知識點樊破,將提到的friendlyhello鏡像上傳推送到你的倉庫注冊地址唆铐。在本節(jié)我們將會用到這個鏡像
  • 確保鏡像能夠已經(jīng)能夠在本機作為一個部署的容器運行 docker run -p 4000:80 username/repo:tag

說明介紹

在本節(jié),我們將擴展我們的應(yīng)用艾岂,并實現(xiàn)負載均衡。為了實現(xiàn)這個目的王浴,我們必須在分布式應(yīng)用程序的層次結(jié)構(gòu)中上升到更高一級:服務(wù)

  • Stack(堆棧)
  • Services(服務(wù),本節(jié)內(nèi)容)
  • Container(容器秒裕,在Part2中介紹的相關(guān)概念)

關(guān)于服務(wù)

在分布式應(yīng)用中钞啸,應(yīng)用的不同部分(組件)稱為服務(wù)喇潘。例如梭稚,如果搭建一個視頻分享網(wǎng)站的應(yīng)用,我們這個應(yīng)用就可能會包含一個存儲應(yīng)用數(shù)據(jù)的數(shù)據(jù)庫服務(wù)弧烤,一個在后臺負責處理用戶上傳的視頻轉(zhuǎn)碼的服務(wù)以及一個負責處理前后端業(yè)務(wù)的服務(wù)等。
服務(wù)在生產(chǎn)環(huán)境中就是各類容器暇昂。一個服務(wù)只基于一個鏡像運行,但是它能夠控制對外暴露的端口信息脏毯,能夠控制運行多少個容器的副本以確保該服務(wù)能夠滿足業(yè)務(wù)性能的要求等幔崖。通過擴展服務(wù)能夠改變應(yīng)用中這部分容器實例運行的數(shù)量,能夠分配更多的計算資源給這個服務(wù)赏寇。
在Docker平臺擴展服務(wù)是一件非常容易的事情,僅僅只需要編寫docker-compose.yml文件嗅定。

第一個docker-compose.yml文件

docker-compose.yml采用YAML文件格式定義了在環(huán)境中容器的行為。
將下文提到的內(nèi)容保存到docker-compose.yml并將該文件保存在合適的位置忙迁。這個地方需要確保我們在Part2中的鏡像已經(jīng)成功的上傳推送到公共鏡像倉庫碎乃,并將文中的username/repo:tag替換為你自己的名稱

version: "3"
services:
  web:
    # replace username/repo:tag with your name and image details
    image: username/repo:tag
    deploy:
      replicas: 5
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
      restart_policy:
        condition: on-failure
    ports:
      - "4000:80"
    networks:
      - webnet
networks:
  webnet:

上文定義的docker-compose.yml將告訴Docker執(zhí)行以下的動作

  • 從公共倉庫注冊地拉取在Part2上傳的鏡像 username/repo:tag
  • 運行這個鏡像的5個實例作為名為web的服務(wù),并限制每個實例的資源使用情況恰梢,最多10%的CPU使用已經(jīng)50M的內(nèi)存
  • 在遇到錯誤停止時梗掰,立即重啟容器
  • 將主機的4000端口映射到web服務(wù)的80端口
  • 指定web服務(wù)的容器通過一個名為webnet的負載均衡的網(wǎng)絡(luò)共享80端口(在服務(wù)內(nèi)部,容器會使用一個臨時的端口對應(yīng)到web服務(wù)的80端口)
  • 使用默認的配置定義webnet網(wǎng)絡(luò)(默認方式是負載均衡的網(wǎng)絡(luò))

運行新的負載均衡的應(yīng)用

在使用docker stack deploy前及穗,我們首先需要運行docker swarm init

注意: 在Part4我們將學(xué)習(xí)到這些命令。如果不運行docker swarm init那么會在執(zhí)行時報錯"this node is not a swarm manager"

至此埂陆,我們就可以運行我們的命令尘分,我們需要給應(yīng)用命名(這里使用getstartedlab):

docker stack deploy -c docker-compose.yml getstartedlab

這樣由運行在鏡像上的5個容器實例組成的單一服務(wù)的應(yīng)用就啟動起來了丸氛。通過docker service ls查看所有的服務(wù),查找到以應(yīng)用名稱為前綴的web服務(wù)的信息定续。如果是使用的上文提到
的名稱命名的話禾锤,那么服務(wù)名稱就是getstartedlab_web私股。同時我們也能夠看到服務(wù)的ID恩掷、副本的數(shù)量、鏡像名稱以及端口信息峭状。

在服務(wù)中一個單獨運行的容器就叫做task(任務(wù))逼争。每個任務(wù)都會有一個根據(jù)副本的數(shù)量自增的唯一ID优床,通過docker service ps getstartedlab_web可以查看到服務(wù)的任務(wù)信息誓焦。

在終端可以多次運行curl -4 http://localhost:4000,或者在瀏覽器中打開頁面并每隔幾秒鐘進行刷新移层,仔細觀察會發(fā)小頁面的信息會變化赫粥,變化的值實際上是容器的ID。這說明每次提供服務(wù)的容器是不同的傅是,實現(xiàn)了一個簡單的負載均衡的效果蕾羊。

擴展應(yīng)用

我們可以通過修改docker-compose.yml里的replicas的值來擴展應(yīng)用,保存修改龟再,然后重新運行docker stack deploy命令
docker stack deploy -c docker-compose.yml getstartedlab
Docker實現(xiàn)了熱更新,不需要首先停止服務(wù)或者關(guān)閉容器浆劲。運行完上面的命令后,接著運行docker container ls -q可以看到變化的情況牌借。如果你是增加了副本的數(shù)量,那么更多的任務(wù)膨报,更多的容器被啟動了

停止應(yīng)用和集群

  • 使用docker stack rm來停止應(yīng)用,docker stack rm getstartedlab
  • 使用docker swarm leave --force關(guān)閉集群

使用Docker來啟動和擴展應(yīng)用是一件非常簡單的事情院领。通過上面的介紹和前面幾篇文章的學(xué)習(xí)够吩,已經(jīng)了解了很多在生產(chǎn)環(huán)境運行容器的知識。接下來周循,我們將繼續(xù)學(xué)習(xí)如何在Docker集群上運行應(yīng)用程序使之成為一個真正的應(yīng)用集群

注意: Compose文件定義了如何在Docker中運行應(yīng)用,并能夠使用Docker Cloud上傳到云服務(wù)提供方拟烫。

總結(jié)

本節(jié)使用到的部分命令如下:

docker stack ls #列出應(yīng)用或stacks
docker stack deploy -c <composefile> <appname> #運行指定的compose文件
docker service ls #使用指定的應(yīng)用名稱列出所有的服務(wù)信息
docker service ps <service> #使用指定的應(yīng)用名稱列出任務(wù)信息
docker inspect <tack or container> #檢查任務(wù)和容器的信息
docker container ls -q #列出容器的id信息
docker stack rm <appname> #停止應(yīng)用
docker swarm leave --force #從管理端關(guān)閉一個單節(jié)點的集群

了解更多

  • 微信公眾號搜索“懶得糊涂個人工作室”了解更多
  • 博客網(wǎng)站地址:http://www.403studio.com
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末迄本,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子置媳,更是在濱河造成了極大的恐慌公条,老刑警劉巖拇囊,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寥袭,死亡現(xiàn)場離奇詭異关霸,居然都是意外死亡传黄,警方通過查閱死者的電腦和手機队寇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門佳遣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來识埋,“玉大人,你說我怎么就攤上這事系忙」几伲” “怎么了笨觅?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵见剩,是天一觀的道長扫俺。 經(jīng)常有香客問我苍苞,道長狼纬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任冈欢,我火速辦了婚禮盈简,結(jié)果婚禮上凑耻,老公的妹妹穿的比我還像新娘柠贤。我一直安慰自己,他們只是感情好邻吭,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布宴霸。 她就那樣靜靜地躺著,像睡著了一般瓢谢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上艺糜,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天幢尚,我揣著相機與錄音,去河邊找鬼尉剩。 笑死,一個胖子當著我的面吹牛理茎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播朗鸠,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼础倍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沟启?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤芽卿,失蹤者是張志新(化名)和其女友劉穎胳搞,沒想到半個月后卸例,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體流酬,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年旦装,在試婚紗的時候發(fā)現(xiàn)自己被綠了摊滔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡呻袭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出腺兴,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布段誊,位于F島的核電站栈拖,受9級特大地震影響连舍,放射性物質(zhì)發(fā)生泄漏涩哟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一潜腻、第九天 我趴在偏房一處隱蔽的房頂上張望器仗。 院中可真熱鬧砾赔,春花似錦青灼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽檀夹。三九已至策橘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丽已,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工吼畏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嘁灯,地道東北人泻蚊。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓性雄,卻偏偏與公主長得像没卸,于是被迫代替她去往敵國和親秒旋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

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