Docker堆棧的管理

在Docker中拾弃,鏡像是一個輕量級的值桩,獨立的可執(zhí)行程序包,包含運行一個軟件所需的所有東西豪椿,包括代碼奔坟、運行環(huán)境、庫搭盾、環(huán)境變量和配置文件咳秉。容器是鏡像的運行實例,默認情況下鸯隅,它與主機環(huán)境完全隔離澜建,只有在配置時才訪問主機文件和端口。

《Docker集群的創(chuàng)建與管理》中蝌以,設置了一個運行Docker的機器集群炕舵,并部署了一個應用程序,容器在多臺機器上運行「現(xiàn)在你可以了解分布式應用程序?qū)哟谓Y(jié)構(gòu)的頂層:堆棧咽筋。堆棧是一組相互關聯(lián)的服務,它們可以共享依賴關系徊件,并且可以一起協(xié)調(diào)和縮放奸攻。單個堆棧能夠定義和協(xié)調(diào)整個應用程序的功能蒜危。

添加一個新服務并重新部署

將服務添加到docker-compose.yml文件很容易,首先添加一個免費的可視化器服務睹耐,使我們能看到是如何調(diào)度容器舰褪。在編輯器中打開docker-compose.yml,并用下面的代碼替換它的內(nèi)容:

version: "3"
services:
  web:
    # 用你的名稱和鏡像細節(jié)替換username/repo:tag
    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:

這里唯一新增的就是名為visualizerweb對等服務疏橄,在這里可以看到兩個新東西:volumes密鑰占拍,賦予visualizer訪問Docker的主機套接字文件的權限,以及一個placement密鑰捎迫,確保此服務只能在集群管理器上運行晃酒。這個由Docker創(chuàng)建的開源項目構(gòu)建的容器可以顯示集群上運行的Docker服務。

確保你的終端被配置為與myvm1進行通信窄绒,運行docker-machine ls列出機器贝次,并確保已連接到myvm1,如果需要可以重新運行docker-machine env myvm1彰导,然后運行給定的命令來配置終端蛔翅。在管理器上重新運行docker stack deploy命令,任何需要更新的服務都將被更新:

$ docker stack deploy -c docker-compose.yml getstartedlab

docker-compose.yml文件中可以看到位谋,visualizer在端口8080上運行山析,通過運行docker-machine ls來獲取其中一個節(jié)點的IP地址,轉(zhuǎn)到8080端口的IP地址掏父,將看到visualizer正在運行:

Visualizer服務

visualizer的單個副本按照預期在管理器上運行笋轨,并且網(wǎng)絡的5個實例遍布整個集群,可以通過運行docker stack ps <stack>來證實這個可視化:

$ docker stack ps getstartedlab

visualizer是一個獨立的服務赊淑,可以在任何包含它的應用程序中運行爵政,它不依賴于其他任何東西。現(xiàn)在創(chuàng)建一個具有依賴性的服務陶缺,Redis服務將提供訪問者計數(shù)器钾挟。

數(shù)據(jù)持久化

再次通過相同的工作流程來添加一個用于存儲應用程序數(shù)據(jù)的Redis數(shù)據(jù)庫,保存這個新的docker-compose.yml文件饱岸,最后添加一個Redis服務:

version: "3"
services:
  web:
    # 用你的名稱和鏡像細節(jié)替換username/repo:tag
    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:
      - /home/docker/data:/data
    deploy:
      placement:
        constraints: [node.role == manager]
    command: redis-server --appendonly yes
    networks:
      - webnet
networks:
  webnet:

Redis在Docker庫中有一個官方鏡像掺出,并且已經(jīng)被授予redis的簡短鏡像名稱,所以在這里沒有username/repo伶贰。Redis端口6379已經(jīng)由Redis預先配置好蛛砰,從容器中暴露給主機罐栈,在docker-compose.yml文件中黍衙,將它從主機暴露給外部,這樣就可以為任何節(jié)點到Redis桌面管理器中荠诬,并管理這個Redis實例琅翻。

最重要的是位仁,redis規(guī)范中有幾件事情使數(shù)據(jù)在這個堆棧的部署之間持續(xù)存在:redis總是在管理器上運行,所以它總是使用相同的文件系統(tǒng)方椎;redis在主機的文件系統(tǒng)中訪問一個任意目錄作為容器內(nèi)部的/data聂抢,這是Redis存儲數(shù)據(jù)的地方√闹冢總之琳疏,這是在Redis數(shù)據(jù)的主機物理文件系統(tǒng)中創(chuàng)建“真實來源”。如果沒有這個闸拿,Redis將把它的數(shù)據(jù)存儲在容器文件系統(tǒng)中的/data中空盼,如果這個容器被重新部署的話,這些數(shù)據(jù)將被清除新荤。

這個真實來源有兩個組成部分:placement在Redis服務上的placement約束揽趾,確保它始終使用相同的主機;創(chuàng)建的volumes允許容器作為/data(在Redis容器內(nèi))訪問/data(在主機上)苛骨,在容器來來去去的時候篱瞎,存儲在指定主機上的/data文件將會持續(xù)存在,從而保持連續(xù)性痒芝。

在管理器上創(chuàng)建一個/data目錄:

$ docker-machine ssh myvm1 "mkdir ./data"

確保終端被配置為與myvm1進行通信俐筋,運行docker-machine ls列出機器,并確保已連接到myvm1严衬,如果需要可以重新運行docker-machine env myvm1校哎,然后運行給定的命令來配置終端。在管理器上重新運行docker stack deploy命令瞳步,任何需要更新的服務都將被更新:

$ docker stack deploy -c docker-compose.yml getstartedlab

運行docker service ls以驗證這三個服務是否按預期運行:

$ docker service ls

查看您的某個節(jié)點的網(wǎng)頁闷哆,您將看到訪客計數(shù)器的結(jié)果,該計數(shù)器現(xiàn)在已經(jīng)存在并將信息存儲在Redis上:

訪客信息存儲在Redis上

另外单起,使用任一節(jié)點的IP地址8080端口訪問可視化器抱怔,將看到隨webvisualizer服務一起運行的redis服務:

三個服務同時運行
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市嘀倒,隨后出現(xiàn)的幾起案子屈留,更是在濱河造成了極大的恐慌,老刑警劉巖测蘑,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灌危,死亡現(xiàn)場離奇詭異,居然都是意外死亡碳胳,警方通過查閱死者的電腦和手機勇蝙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挨约,“玉大人味混,你說我怎么就攤上這事产雹。” “怎么了翁锡?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵蔓挖,是天一觀的道長。 經(jīng)常有香客問我馆衔,道長瘟判,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任角溃,我火速辦了婚禮荒适,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘开镣。我一直安慰自己刀诬,他們只是感情好,可當我...
    茶點故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布邪财。 她就那樣靜靜地躺著陕壹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪树埠。 梳的紋絲不亂的頭發(fā)上糠馆,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天,我揣著相機與錄音怎憋,去河邊找鬼又碌。 笑死,一個胖子當著我的面吹牛绊袋,可吹牛的內(nèi)容都是我干的毕匀。 我是一名探鬼主播,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼癌别,長吁一口氣:“原來是場噩夢啊……” “哼皂岔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起展姐,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤躁垛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后圾笨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體教馆,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年擂达,在試婚紗的時候發(fā)現(xiàn)自己被綠了土铺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,973評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖舒憾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情穗熬,我是刑警寧澤镀迂,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站唤蔗,受9級特大地震影響探遵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妓柜,卻給世界環(huán)境...
    茶點故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一箱季、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧棍掐,春花似錦藏雏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至粟誓,卻和暖如春奏寨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鹰服。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工病瞳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悲酷。 一個月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓套菜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親设易。 傳聞我的和親對象是個殘疾皇子笼踩,可洞房花燭夜當晚...
    茶點故事閱讀 45,982評論 2 361

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

  • 1.Compose介紹 Docker Compose是一個用來定義和運行復雜應用的Docker工具嚎于。一個使用Doc...
    渝味閱讀 7,235評論 0 2
  • 在此部分中知染,您將學習分布式應用程序?qū)哟谓Y(jié)構(gòu)的頂層:堆棧肋僧。堆是一組相互關聯(lián)的服務,它們共享依賴關系,并且可以放在一起...
    MicoCube閱讀 703評論 0 0
  • 什么是docker Docker 是一個開源項目嫌吠,誕生于 2013 年初止潘,最初是 dotCloud 公司內(nèi)部的一個...
    mrZhao丶閱讀 317評論 0 0
  • summer#17.01.02#打卡 人性的弱點之一是學不會自我欺騙。 今天是很有閱歷的兩個叔叔親授關于人生的感情...
    寫故事的阿夏閱讀 305評論 0 1
  • 第一次聽到混沌理論辫诅,很興奮凭戴,那是李老師的課,他優(yōu)雅浪漫靈動的狀態(tài)比他講的混沌理論還打動我炕矮,雖然我對課的感覺還是有些...
    安喜喜閱讀 72評論 0 0