目錄表

Docker Swarm (Docker 多主機方案)

安裝與部署

  1. 確保每一台已經安裝好 docker 環境且每台之間都可以透過 TCP port 2377 互相溝通
  2. 選定一台當主控點 Exp. 192.168.11.186
    1. 登入到 192.168.11.186
    2. 執行初始化指令

      docker swarm init --advertise-addr 192.168.11.186

    3. 將回應的訊息記錄下來 Exp.

      docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk7434l103e8k2d6x 192.168.11.186:2377

  3. 將三台 docker 環境加入成為 swarm 的 Worker Exp. 192.168.11.182, 192.168.11.237, 192.168.11.195
    1. 登入到 192.168.11.182, 192.168.11.237, 192.168.11.195
    2. 貼上並執行加入指令 (請使用您自己產生的 Token 和 IP)

      docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk7434l103e8k2d6x 192.168.11.186:2377

  4. 回到主控點上 Exp. 192.168.11.186 查看狀態

    docker node ls

如果忘記加入 Swarm 的語法
  • 到主控點執行
  1. 取得加入成為 Manager 語法 :

    docker swarm join-token manager

  2. 取得加入成為 Worker 語法 :

    docker swarm join-token worker

使用 portainer 進行 Web 統一控管

建立 shepherd 統一在主控點進行管理

FAQ

1. 移除特定 Worker host 方式 Exp. immich-237

2. 建立擴充至三台當主控點

3. 建立 nfs volume 的作法

  1. 先在 NFS Server 建立分享目錄與權限設定 參考 - Linux NFS 設定
  2. NFS Volume 的指定方式如下 Exp. NFS Serer: 192.168.1.159 , 分享目錄: /swarmdata/mystack/nfs-data
    volumes:
      mystack_nfs-data:
        driver: local
        driver_opts:
          type: nfs
          o: "addr=192.168.1.159,rw,noatime,rsize=8192,wsize=8192,tcp,timeo=14,nfsvers=4"
          device: ":/swarmdata/mystack/nfs-data"
  • 啟動 stack 時不會如同本地 volume 自動建立出目錄, 必須要在 NFS Server 先建立好指定的目錄 Exp.

    mkdir -p /swarmdata/mystack/nfs-data

  • 如想要修改 NFS Volume 定義
    1. 要將 stack 移除 Exp.

      docker stack rm mystack

    2. 進入 swarm 每個 node 移除 volume Exp.

      docker volume rm mystack_nfs-data

    3. 重新部署 stack Exp.

      docker stack deploy -c mystack.yml mystack

    4. 檢查新建立的 Volume 內容 Exp.

      docker volume inspect mystack_nfs-data