6.Docker入門(五)多服務(wù)組成Stack

注意

以下內(nèi)容完全摘自Docker官方文檔寝凌,僅為學(xué)習(xí)及技術(shù)分享所用狮含,切勿用于商業(yè)用途顽悼,轉(zhuǎn)載請注明出處。

以下為正文


了解Stack

在Docker中几迄,我們把一組相互關(guān)聯(lián)蔚龙、相互依賴、共同協(xié)作完成某些業(yè)務(wù)功能的服務(wù)稱為一個Stack(服務(wù)棧)映胁。一個Stack應(yīng)該可以定義和完成整個應(yīng)用程序的功能木羹,當(dāng)然一些較復(fù)雜的應(yīng)用程序可以由多個Stack構(gòu)成。簡而言之:Stack就是一組服務(wù)的集合解孙。
接下來坑填,我們在學(xué)完 ServiceSwarm 的基礎(chǔ)上,利用之前編寫的docker-compose.yml和swarm集群弛姜,添加另外兩個服務(wù):visualizer和redis脐瑰,實現(xiàn)可視化顯示集群中container的狀態(tài)和存儲集群訪問次數(shù)的功能,組成我們的第一個Stack廷臼。

添加visualizer服務(wù)

visualizer是Docker官方開發(fā)的一個服務(wù)苍在,利用它可以可視化顯示集群中container的調(diào)度情況绝页。如果想了解更多,可以到visualizer的github寂恬。
打開docker-compose.yml续誉,將內(nèi)容替換成以下代碼:

version: "3"
services:
  web:
    image: username/repo:tag
    deploy:
      replicas: 5
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
    ports:
      - "80:80"
    networks:
      - webnet
  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - webnet
networks:
  webnet:

這里,我們?yōu)閣eb服務(wù)添加了一個監(jiān)聽服務(wù): visualizer初肉。我們?yōu)関isualizer服務(wù)指定了兩個鍵值酷鸦,volumes和deploy。volumes映射容器中/var/run/docker.sock到宿主機(jī)的/var/run/docker.sock文件中牙咏,deploy鍵通過添加contraints:[node.role==manager]指定visualizer只會部署在swarm manager節(jié)點上臼隔,而不會部署在worker節(jié)點上。因為只有在swarm manager上眠寿,才可以對整個集群進(jìn)行管理躬翁,才能監(jiān)聽到整個集群的狀態(tài)焦蘑。

接下來盯拱,我們把這個新的docker-compose.yml發(fā)送到myvm1這臺虛機(jī)上。

docker-machine scp docker-compose.yml myvm1:~

然后重新部署應(yīng)用

$ docker-machine ssh myvm1 "docker stack deploy -c docker-compose.yml getstartedlab"
Updating service getstartedlab_web (id: angi1bf5e4to03qu9f93trnxm)
Updating service getstartedlab_visualizer (id: l9mnwkeq2jiononb5ihz9u7a4)

可以看到例嘱,兩個服務(wù)組件都得到了更新狡逢,通過訪問myvm1或者myvm2中任一臺實例的8080端口,可以看到visualizer顯示的效果如下圖:

get-started-visualizer1.png

添加redis服務(wù)顯示訪問次數(shù)

將docker-compse.yml內(nèi)容替換如下:

version: "3"
services:
  web:
    image: username/repo:tag
    deploy:
      replicas: 5
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
    ports:
      - "80:80"
    networks:
      - webnet
  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - webnet
  redis:
    image: redis
    ports:
      - "6379:6379"
    volumes:
      - ./data:/data
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - webnet
networks:
  webnet:

這里我們做了以下幾件事:

  • 添加了redis服務(wù)拼卵,由于它是Docker官方正式提供的鏡像文件奢浑,所以無需指定username和tag,直接用小寫的redis就可以定位到鏡像腋腮。
  • 將6379端口公開并映射到宿主機(jī)的6379端口雀彼,6379是Redis默認(rèn)配置的對外端口,您可以通過集群中任一主機(jī)IP地址加上6379端口訪問Redis Desktop Manager(Redis自帶管理界面)即寡。
  • volumes將/data目錄映射到宿主機(jī)./data目錄徊哑,/data是redis默認(rèn)存儲數(shù)據(jù)的目錄,通過這樣的映射聪富,即使容器掛了或者重新部署莺丑,數(shù)據(jù)都已經(jīng)保留到了宿主機(jī)上,不會丟失墩蔓。
  • deploy通過constraints將redis部署到swarm manager節(jié)點上梢莽。

接下來,我們需要在myvm1實例(即redis服務(wù)容器所在宿主機(jī))上創(chuàng)建./data目錄奸披,然后重新部署我們的應(yīng)用昏名,依次執(zhí)行以下命令:

$ docker-machine ssh myvm1 "mkdir ./data"
$ docker-machine scp docker-compose.yml myvm1:~
$ docker-machine ssh myvm1 "docker stack deploy -c docker-compose.yml getstartedlab"

部署完后,再次訪問集群中任一個實例的IP地址(端口為80)阵面,即訪問我們部署的web服務(wù)轻局,就可以看到一個顯示訪問次數(shù)的界面了(我們的web服務(wù)組件其實已經(jīng)包含了我們在創(chuàng)建Docker鏡像章節(jié)中用python寫的使用redis存儲訪問次數(shù)的程序app.py)份殿。

至此,您就構(gòu)建了一個集web負(fù)載均衡嗽交、visualizer圖形界面卿嘲、redis存儲的Stack。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末夫壁,一起剝皮案震驚了整個濱河市拾枣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盒让,老刑警劉巖梅肤,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異邑茄,居然都是意外死亡姨蝴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門肺缕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來左医,“玉大人,你說我怎么就攤上這事同木「∩遥” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵彤路,是天一觀的道長秕硝。 經(jīng)常有香客問我,道長洲尊,這世上最難降的妖魔是什么远豺? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮坞嘀,結(jié)果婚禮上躯护,老公的妹妹穿的比我還像新娘。我一直安慰自己姆吭,他們只是感情好榛做,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著内狸,像睡著了一般检眯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上昆淡,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天锰瘸,我揣著相機(jī)與錄音,去河邊找鬼昂灵。 笑死避凝,一個胖子當(dāng)著我的面吹牛舞萄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播管削,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼倒脓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了含思?” 一聲冷哼從身側(cè)響起崎弃,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎含潘,沒想到半個月后饲做,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡遏弱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年盆均,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漱逸。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡泪姨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出虹脯,到底是詐尸還是另有隱情驴娃,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布循集,位于F島的核電站,受9級特大地震影響蔗草,放射性物質(zhì)發(fā)生泄漏咒彤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一咒精、第九天 我趴在偏房一處隱蔽的房頂上張望镶柱。 院中可真熱鬧,春花似錦模叙、人聲如沸歇拆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽故觅。三九已至,卻和暖如春渠啊,著一層夾襖步出監(jiān)牢的瞬間输吏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工替蛉, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留贯溅,地道東北人拄氯。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像它浅,于是被迫代替她去往敵國和親译柏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

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