docker swarm yaml

https://www.cnblogs.com/bigberg/p/8867326.html

一、簡介

  Docker有個編排工具docker-compose,可以將組成某個應該的多個docker容器編排在一起,同時管理。同樣在Swarm集羣中,可以使用docker stack 將一組相關聯的服務進行編排管理。

  Docker stack 也是一個yaml文件,和一份docker-compose.yml文件差不多,指令也基本一致。但是與compose相比其不支持build、links和network_mode。Docker stack有一個新的指令deploy。

  注:stack不支持的指令

  

 

二、Deploy

  Deploy是用來指定swarm服務部署和運行時的相關配置,並且只有使用docker stack deploy 部署swarm集羣時纔會生效。如果使用docker-compose up 或者docker-compose run時,該選項會被忽略。要使用deploy選項,compose-file中version版本要在3或3+。  

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服務發現的模式

  • endpoint_mode: vip - Docker爲swarm集羣服務分配一個虛擬IP(VIP),作爲客戶端到達集羣服務的“前端”。Docker 在客戶端和可用工作節點之間對服務的請求進行路由。而客戶端不用知道有多少節點參與服務或者是這些節點的IP/端口。(這是默認模式)
  • endpoint_mode: dnsrr - 
    DNS輪詢(DNSRR)服務發現不使用單個虛擬IP。 Docker爲服務設置DNS條目,使得服務名稱的DNS查詢返回一個IP地址列表,並且客戶端直接連接到其中的一個。如果您想使用自己的負載平衡器,或者混合Windows和Linux應用程序,則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:

  

  (2)LABELS  

  指定服務的標籤。這些標籤僅在服務上設置,而不在服務的任何容器上設置  

version: "3"
services:
  web:
    image: web
    deploy:
      labels:
        com.example.description: "This label will appear on the web service"

  

  要改爲在容器上設置標籤,請在deploy之外使用標籤鍵

version: "3"
services:
  web:
    image: web
    labels:
      com.example.description: "This label will appear on all containers for the web service"

  

  (3)MODE

  全局(每個羣集節點只有一個容器)或副本(指定容器的數量)。默認值被副本。 

version: '3'
services:
  worker:
    image: dockersamples/examplevotingapp_worker
    deploy:
      mode: global

  

  (4)PLACEMENT

  指定約束和偏好設置 

version: '3'
services:
  db:
    image: postgres
    deploy:
      placement:
        constraints:
          - node.role == manager
          - engine.labels.operatingsystem == ubuntu 14.04
        preferences:
          - spread: node.labels.zone

  

  (5)REPLICAS

  如果服務是副本模式(默認模式),可以指定該服務運行的容器數量。 

version: '3'
services:
  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 6

  

  (6)RESOURCES

  資源限制配置 

注意:這會替換版本3之前的Compose文件(cpu_shares,cpu_quota,cpuset,mem_limit,memswap_limit,mem_swappiness)
中的非羣集模式的舊資源約束選項,如升級2.x版至3.x中所述。  

  

  在下例中,redis服務限制使用不超過50M的內存和0.50(50%)的可用處理時間(CPU),並且擁有20M的內存和0.25個CPU時間(總是可用)。  

version: '3'
services:
  redis:
    image: redis:alpine
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 50M
        reservations:
          cpus: '0.25'
          memory: 20M

  

  (7)RESTART_POLICY

  配置在容器退出時是否並如何重啓容器。取代restart指令。

  • condition :none、on-failure和any(默認any)
  • delay :在重啓嘗試之間等待多久(默認0)
  • max_attempts :嘗試重啓的次數(默認一直重啓,直到成功)
  • window : 在確實一個重啓是否成功前需要等待的窗口時間 
version: "3"
services:
  redis:
    image: redis:alpine
    deploy:
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 120s

  

  (8)UPDATE_CONFIG

  配置服務如何升級

  • parallelism:同一時間升級的容器數量
  • delay:容器升級間隔時間
  • failure_action:升級失敗後的動作(continue、rollback和pause。默認pause)。
  • monitor:更新完成後確實成功的時間(ns|us|ms|s|m|h)。(默認0s)
  • max_failure_ratio:更新期間允許的失敗率
  • order: 更新期間的操作順序。停止優先(舊任務在開始新任務之前停止)或者先啓動(首先啓動新任務,並且正在運行的任務短暫重疊)(默認停止優先)注意:只支持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

  

  (9)depends_on

  表示服務之間的依賴關係  

version: '3'
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

  

  (10)dns  

  自定義DNS服務器。可以是單個值或列表。 

dns: 8.8.8.8
dns:
  - 8.8.8.8
  - 9.9.9.9

  

  (11)dns_search  

dns_search: example.com
dns_search:
  - dc1.example.com
  - dc2.example.com

  

  (12)environment  

  添加環境變量。您可以使用數組或字典。任何布爾值;真/假,是/否,需要用引號括起來以確保它們不被YML解析器轉換爲True或False。 

environment:
  RACK_ENV: development
  SHOW: 'true'
  SESSION_SECRET:
 
environment:
  - RACK_ENV=development
  - SHOW=true
  - SESSION_SECRET

 

  (13)expose

  開放容器的端口而不用在主機上暴露端口,它們只能被相關聯的服務獲取。只能指定內部端口。 

expose:
 - "3000"
 - "8000"

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章