Docker Swarm

什麼是Docker Swarm

  • 從docker 1.12+ 開始
  • 大概2016年中之後才開始流行
  • 相依3.19+以上的linux kernel
  • 可以看做kubernetes的分身(不包含完整infra)
    • 在某個程度參考kubernetes運作

選擇Docker Swarm理由

  • 落地方便
  • 高可用性
  • 價格便宜

Docker Swarm的組成

Node

  • 區分兩種節點
    • Manager
    • Worker
  • 可以隨時rolling update

Manager Node

  • 主控制節點
  • 同時也是Worker Node
  • 不能失敗(控制整個Docker Swarm的部署)
  • 對所有Worker Node發號施令
  • 擁有所有Worker Node的狀態(不一定準確)

Worker Node

  • Manager Node的小弟
  • 不具備任何控制權限
  • 看不到其他的Worker Node

Service

  • 一個Service包含一種container
  • Service啟動不代表container啟動
  • 可以對container進行health check
  • Service可以啟動複數個container(replicas)

Task

  • 主要是由Service帶起來的
  • 代表在docker container內執行的指令
  • task會在node上到執行結束為止

Routing Mesh

  • Internal Layer4 Load Balancer
  • IPVS (IP Virtual Server)
  • port 30000 ~ 32767

與docker swarm有關

  • docker secret
  • docker swarm
  • docker stack
  • docker service

安裝docker swarm

docker swarm init

以為這樣就結束了嗎?

docker login -u michael -p xxxx registry.gitlab.com

關於機敏資料的保護

docker之前的作法

  • 全部都在環境變數內
  • printenv可以取得全部的資料
  • 方便,但不安全

secret

  • 由docker daemon保護
  • 由key value的方式保存檔案
  api:
    image: registry.gitlab.com/ixsecurity/key-server/high-availability/api:latest
    deploy:
      replicas: 5
      restart_policy:
        condition: on-failure
    ports:
      - 80:3000
    volumes:
      - type: volume
        source: secret
        target: /credential
        volume:
          nocopy: true
    secrets:
      - env
    environment:
      - DEBUG=key-server-api
    depends_on:
      - redis

關於部署docker swarm

  • 推薦使用docker-compose
  • version儘量在3以上
  • depends_on沒什麼用
  • 注意不支援的指令

部署方式

docker stack deploy --compose-file docker-compose.yml [stack] --with-registry-auth

docker stack ps [stack]

Made with Slides.com