Docker Swarm 服務(wù)編排之命令詳解
一、簡介
Docker有個編排工具docker-compose,可以將組成某個應(yīng)該的多個docker容器編排在一起,同時管理。同樣在Swarm集群中,可以使用docker stack 將一組相關(guān)聯(lián)的服務(wù)進行編排管理。
Docker stack 也是一個yaml文件,和一份docker-compose.yml文件差不多,指令也基本一致。但是與compose相比其不支持build、links和network_mode。Docker stack有一個新的指令deploy。
注:stack不支持的指令

二、Deploy
Deploy是用來指定swarm服務(wù)部署和運行時的相關(guān)配置,并且只有使用docker stack deploy 部署swarm集群時才會生效。如果使用docker-compose up 或者docker-compose run時,該選項會被忽略。要使用deploy選項,compose-file中version版本要在3或3+?! ?/p>
version: '3'
services:
redis:
image: redis:alpine
deploy:
replicas: 6
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
(1)ENDPOINT_MODE
指定swarm服務(wù)發(fā)現(xiàn)的模式
- endpoint_mode: vip - Docker為swarm集群服務(wù)分配一個虛擬IP(VIP),作為客戶端到達集群服務(wù)的“前端”。Docker 在客戶端和可用工作節(jié)點之間對服務(wù)的請求進行路由。而客戶端不用知道有多少節(jié)點參與服務(wù)或者是這些節(jié)點的IP/端口。(這是默認(rèn)模式)
- endpoint_mode: dnsrr -
DNS輪詢(DNSRR)服務(wù)發(fā)現(xiàn)不使用單個虛擬IP。 Docker為服務(wù)設(shè)置DNS條目,使得服務(wù)名稱的DNS查詢返回一個IP地址列表,并且客戶端直接連接到其中的一個。如果您想使用自己的負(fù)載平衡器,或者混合Windows和Linux應(yīng)用程序,則DNS輪詢功能非常有用。
注:version 3.3+
version: "3.3"
services:
wordpress:
image: wordpress
ports:
- 8080:80
networks:
- overlay
deploy:
mode: replicated
replicas: 2
endpoint_mode: vip
mysql:
image: mysql
volumes:
- db-data:/var/lib/mysql/data
networks:
- overlay
deploy:
mode: replicated
replicas: 2
endpoint_mode: dnsrr
volumes:
db-data:
networks:
overlay:
?。?)LABELS
指定服務(wù)的標(biāo)簽。這些標(biāo)簽僅在服務(wù)上設(shè)置,而不在服務(wù)的任何容器上設(shè)置
version: "3"
services:
web:
image: web
deploy:
labels:
com.example.description: "This label will appear on the web service"
要改為在容器上設(shè)置標(biāo)簽,請在deploy之外使用標(biāo)簽鍵
version: "3"
services:
web:
image: web
labels:
com.example.description: "This label will appear on all containers for the web service"
?。?)MODE
全局(每個群集節(jié)點只有一個容器)或副本(指定容器的數(shù)量)。默認(rèn)值被副本?!?/p>
version: '3'
services:
worker:
image: dockersamples/examplevotingapp_worker
deploy:
mode: global
(4)PLACEMENT
指定約束和偏好設(shè)置
version: '3'
services:
db:
image: postgres
deploy:
placement:
constraints:
- node.role == manager
- engine.labels.operatingsystem == ubuntu 14.04
preferences:
- spread: node.labels.zone
?。?)REPLICAS
如果服務(wù)是副本模式(默認(rèn)模式),可以指定該服務(wù)運行的容器數(shù)量。
version: '3'
services:
worker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 6
?。?)RESOURCES
資源限制配置
version: '3'
services:
redis:
image: redis:alpine
deploy:
resources:
limits:
cpus: '0.50'
memory: 50M
reservations:
cpus: '0.25'
memory: 20M
在下例中,redis服務(wù)限制使用不超過50M的內(nèi)存和0.50(50%)的可用處理時間(CPU),并且擁有20M的內(nèi)存和0.25個CPU時間(總是可用)。
?。?)RESTART_POLICY
配置在容器退出時是否并如何重啟容器。取代restart指令。
- condition :none、on-failure和any(默認(rèn)any)
- delay :在重啟嘗試之間等待多久(默認(rèn)0)
- max_attempts :嘗試重啟的次數(shù)(默認(rèn)一直重啟,直到成功)
- window : 在確實一個重啟是否成功前需要等待的窗口時間
version: "3"
services:
redis:
image: redis:alpine
deploy:
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
window: 120s
?。?)UPDATE_CONFIG
配置服務(wù)如何升級
- parallelism:同一時間升級的容器數(shù)量
- delay:容器升級間隔時間
- failure_action:升級失敗后的動作(continue、rollback和pause。默認(rèn)pause)。
- monitor:更新完成后確實成功的時間(ns|us|ms|s|m|h)。
- (默認(rèn)0s)max_failure_ratio:更新期間允許的失敗率o
- rder:更新期間的操作順序。停止優(yōu)先(舊任務(wù)在開始新任務(wù)之前停止)或者先啟動(首先啟動新任務(wù),并且正在運行的任務(wù)短暫重疊)(默認(rèn)停止優(yōu)先)注意:只支持v3.4及更高版本。
version: '3.4'
services:
vote:
image: dockersamples/examplevotingapp_vote:before
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
order: stop-first
?。?)depends_on
表示服務(wù)之間的依賴關(guān)系
version: '3'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
?。?0)dns
自定義DNS服務(wù)器??梢允菃蝹€值或列表?!?/p>
dns: 8.8.8.8 dns: - 8.8.8.8 - 9.9.9.9
?。?1)dns_search
dns_search: example.com dns_search: - dc1.example.com - dc2.example.com
(12)environment
添加環(huán)境變量。您可以使用數(shù)組或字典。任何布爾值;真/假,是/否,需要用引號括起來以確保它們不被YML解析器轉(zhuǎn)換為True或False。
environment: RACK_ENV: development SHOW: 'true' SESSION_SECRET: environment: - RACK_ENV=development - SHOW=true - SESSION_SECRET
?。?3)expose
開放容器的端口而不用在主機上暴露端口,它們只能被相關(guān)聯(lián)的服務(wù)獲取。只能指定內(nèi)部端口。
expose: - "3000" - "8000"
以上就是Docker Swarm 服務(wù)編排之命令的詳細(xì)內(nèi)容,更多關(guān)于Docker Swarm 服務(wù)編排的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
如何運用docker配合python開發(fā)環(huán)境實例
本篇文章主要介紹了如何運用docker配合python開發(fā)實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07
Docker 部署net5程序?qū)崿F(xiàn)跨平臺功能
本文講述使用docker容器部署.net5項目、實現(xiàn)跨平臺,本文通過圖文的形式給大家介紹了創(chuàng)建.net5項目的過程及安裝成功后如何使用docker部署項目,感興趣的朋友跟隨小編一起學(xué)習(xí)吧2021-05-05
docker安裝部署 onlyoffice的詳細(xì)過程
本文給大家分享docker安裝部署 onlyoffice的詳細(xì)過程,通過圖文并茂實例相結(jié)合給大家分享安裝Docker Desktop及如何進入BIOS設(shè)置CPU的虛擬化,感興趣的朋友一起看看吧2021-06-06

