0x2 Docker系列:Docker官方文檔翻譯5

      網(wǎng)友投稿 695 2025-03-31

      堆棧(Stacks)


      準備工作

      安裝docker 1.13及以上版本

      安裝docker Compose正如第三部分的準備工作。

      安裝Docker Machine正如第四部分的準備工作。

      閱讀第一部分的引導。

      學習怎么在第二部分創(chuàng)建容器。

      確保你已經(jīng)發(fā)布friendlyhello 鏡像,并推送到公共倉庫。我們需要在這一部分用到這個鏡像。

      確保你的鏡像能夠成為一個被部署的容器能正常工作。

      從第三篇文章拷貝一份docker-compose.yml

      確保第四部分的docker machine已經(jīng)正確安裝,通過docker-machine ls查看。

      確保docker swarm正確安裝,并且運行。通過執(zhí)行docker-machine ssh myvm1 “docker node ls 命令驗證。

      介紹

      在第4部分中,你學習了如何設置一個swarm,這是一群運行Docker的機器,并為其部署了一個應用程序,應用才能修包含的眾多容器在多臺機器上運行。

      在第5部分中,你將學習分布式應用程序?qū)哟谓Y(jié)構(gòu)的頂部:堆棧。 堆棧是一組相互關聯(lián)的服務,它們可以共享依賴關系,并且可以進行協(xié)調(diào)和伸縮。 單個堆棧能夠定義和協(xié)調(diào)整個應用程序的功能(盡管非常復雜的應用程序可能需要使用多個堆棧)。

      好消息是,從第3部分開始,在創(chuàng)建Compose文件并使用Docker堆棧部署時,從技術上講,你一直在使用堆棧。 但是,這是在單個主機上運行的單個服務堆棧,通常不會發(fā)生在生產(chǎn)環(huán)境中。 在這里,你可以把你學到的東西,使多個服務相互關聯(lián),并在多臺機器上運行它們。

      你做得很好,這就是主場!

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

      添加服務到docker-compose文件是非常簡單的。首先,添加一個可視化界面的服務,可以讓我們查看swarm正在調(diào)度的容器。

      1.打開docker-compose文件,并將以下的內(nèi)容替換成文件的內(nèi)容。確保用你的鏡像信息替換username/repo:tag 的內(nèi)容。

      version: "3"

      services:

      web:

      # replace username/repo:tag with your name and image details

      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:

      我們稍后會詳細討論lacement constraints 和volumes 。

      2.確保你的shell被配置為與myvm1進行通信(完整的例子在這如下)。

      運行docker-machine ls列出機器,并確保您已連接到myvm1,如旁邊的星號所示。

      如果需要,重新運行docker-machine env myvm1,然后運行給定的命令來配置shell。

      在Mac或Linux上,命令是:

      eval $(docker-machine env myvm1)

      3.在manager上重新運行docker stack deploy命令,并且需要更新的任何服務都會更新:

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

      Updating service getstartedlab_web (id: angi1bf5e4to03qu9f93trnxm)

      Creating service getstartedlab_visualizer (id: l9mnwkeq2jiononb5ihz9u7a4)

      查看可視化界面

      你在Compose文件中看到,可視化工具在端口8080上運行。通過運行docker-machine ls來獲取其中一個節(jié)點的IP地址。 轉(zhuǎn)到8080端口的IP地址,您可以看到可視化器正在運行:

      可視化器的單個副本按照預期在manager上運行,并且網(wǎng)絡的5個實例遍布整個群集。 你可以通過運行docker stack ps來確認此可視化:

      docker stack ps getstartedlab

      可視化器是一個獨立的服務,可以在包含它的任何應用程序中運行。 它不依賴于其他任何東西。現(xiàn)在讓我們創(chuàng)建一個具有依賴性的服務:提供訪問者計數(shù)器的Redis服務。

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

      讓我們再次通過相同的工作流程來添加用于存儲應用程序數(shù)據(jù)的Redis數(shù)據(jù)庫。

      保存這份新的docker-compose.yml文件,它最后添加了一個redis服務。確保用的鏡像信息替換掉username/repo:tag的內(nèi)容。

      version: "3"

      services:

      web:

      # replace username/repo:tag with your name and image details

      image: username/repo:tag

      deploy:

      replicas: 5

      restart_policy:

      condition: on-failure

      resources:

      limits:

      cpus: "0.1"

      0x2 Docker系列:Docker官方文檔翻譯5

      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庫中有一個正式鏡像,并且已被授予redis的簡短鏡像名稱,所以在這里沒有username/repo符號。 Redis端口6379已經(jīng)由Redis預先配置為從容器暴露給主機,并且在我們的Compose文件中,我們將它從主機展示給所有容器,因此你可以實際輸入任何IP的IP 節(jié)點添加到Redis桌面管理器中并管理此Redis實例,如果愿意的話。

      最重要的是,redis規(guī)范中有幾件事情使數(shù)據(jù)在這個堆棧的部署之間持久化:

      redis總是在管理器上運行,所以它總是使用相同的文件系統(tǒng)。

      redis在主機文件系統(tǒng)中訪問任意目錄作為容器內(nèi)的/ data,這是Redis存儲數(shù)據(jù)的地方。

      這就是在主機物理文件系統(tǒng)中為Redis數(shù)據(jù)創(chuàng)建“source of truth”。 如果沒有這個,Redis會將其數(shù)據(jù)存儲在容器文件系統(tǒng)中的/ data中,如果該容器曾經(jīng)被重新部署,該數(shù)據(jù)將被清除。

      真實的數(shù)據(jù)源(source of truth)由2部分組成:

      放置在Redis服務上的 placement constraint,確保它始終使用相同的主機。

      創(chuàng)建的volume ,允許容器作為/ data(位于Redis容器內(nèi))訪問./data(在主機上)。 在容器重復開啟和關閉時,存儲在指定主機上的./data文件仍然存在,從而保持連續(xù)性。

      2.在manager上創(chuàng)建一個./data目錄

      docker-machine ssh myvm1 "mkdir ./data"

      3.確保你的shell被配置為與myvm1進行通信(完整的例子在這里)。

      運行docker-machine ls命令,列出所有的機器和確保你已經(jīng)連上myvm1。

      如果需要,重新運行docker-machine env myvm1命令,然后再運行以下命令:

      eval $(docker-machine env myvm1)

      運行docker stack deploy命令

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

      5.運行docker service ls命令,去驗證這三個服務跟預期一樣正常運行。

      $ docker service ls

      ID ? ? ? ? ? ? ? ? ?NAME ? ? ? ? ? ? ? ? ? ? ? MODE ? ? ? ? ? ? ? ?REPLICAS ? ? ? ? ? ?IMAGE ? ? ? ? ? ? ? ? ? ? ? ? ? ? PORTS

      x7uij6xb4foj ? ? ? ?getstartedlab_redis ? ? ? ?replicated ? ? ? ? ?1/1 ? ? ? ? ? ? ? ? redis:latest ? ? ? ? ? ? ? ? ? ? ?*:6379->6379/tcp

      n5rvhm52ykq7 ? ? ? ?getstartedlab_visualizer ? replicated ? ? ? ? ?1/1 ? ? ? ? ? ? ? ? dockersamples/visualizer:stable ? *:8080->8080/tcp

      mifd433bti1d ? ? ? ?getstartedlab_web ? ? ? ? ?replicated ? ? ? ? ?5/5 ? ? ? ? ? ? ? ? orangesnap/getstarted:latest ? ?*:80->80/tcp

      6.查看你的機器的一個節(jié)點的web頁面,比如http://192.168.99.101,并且查看訪客計數(shù)的結(jié)果,該計數(shù)現(xiàn)在已經(jīng)存在并將信息存儲在Redis上。

      另外,請檢查任一節(jié)點IP地址的端口8080處的可視化工具,并注意查看隨Web和可視化工具一起運行的redis服務。

      Docker

      版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。

      版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。

      上一篇:制造企業(yè)需要什么樣的MES系統(tǒng)
      下一篇:excel2010怎么截圖(EXCEl怎么截圖)
      相關文章
      国产亚洲精品高清在线| 久久久国产亚洲精品| 最新国产精品亚洲| 亚洲午夜未满十八勿入| 精品亚洲永久免费精品| 在线观看国产区亚洲一区成人| 亚洲阿v天堂在线2017免费| 欧洲亚洲综合一区二区三区| 亚洲成a人片在线观看天堂无码 | 亚洲熟妇无码AV不卡在线播放| 亚洲av无码国产综合专区| 亚洲1234区乱码| 亚洲无吗在线视频| 亚洲精品国产日韩| 亚洲中文无码卡通动漫野外| 亚洲人成色77777在线观看| 亚洲国产精品无码中文lv| 国产亚洲精品成人久久网站| 亚洲第一福利网站在线观看| 亚洲一区二区三区乱码A| 精品国产亚洲一区二区三区| 亚洲av女电影网| 亚洲毛片无码专区亚洲乱| 亚洲不卡中文字幕| 亚洲中文字幕精品久久| 亚洲AV无码AV男人的天堂不卡| 日本中文一区二区三区亚洲| 亚洲精品国产高清不卡在线| 国产亚洲一区二区三区在线不卡| 亚洲精品乱码久久久久久久久久久久 | 亚洲精品国产精品国自产网站 | 三上悠亚亚洲一区高清| 亚洲精品无码不卡在线播HE | 亚洲AV日韩AV天堂久久| 色噜噜综合亚洲av中文无码| 亚洲激情电影在线| 日本亚洲精品色婷婷在线影院 | 久久精品亚洲视频| 91亚洲精品自在在线观看| 亚洲色欲色欲www| 苍井空亚洲精品AA片在线播放 |