NO IMAGE
前提條件:
  • Docker engine 1.12或以上版本
  • 網路:
TCP port 2377 for cluster management communications
TCP and UDP port 7946 for communication among nodes
TCP and UDP port 4789 for overlay network traffic

Create swarm
     –advertise-addr 為可選,如不指定,預設選擇eth0網絡卡的IP。指定時,不支援指定浮動IP。
     輸出的資訊中,列出了新增work節點的命令和manager節點的命令。
[email protected]:~# docker swarm init –advertise-addr 192.168.100.23
Swarm initialized: current node (0bw30fkeiredi0fg1pxg710ld) is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join \
    –token SWMTKN-1-2hayq3edoqv3lc5chpw23e76r8qp67ctx13dcepghdzu9jgngy-0ji06x1fy8pfunlxdy1p2wfm7 \
    192.168.100.23:2377
To add a manager to this swarm, run the following command:
    docker swarm join \
    –token SWMTKN-1-2hayq3edoqv3lc5chpw23e76r8qp67ctx13dcepghdzu9jgngy-00o8m54kldov9bd24mi2dt8gu \
    192.168.100.23:2377
[email protected]:~#
     新增後,可通過以下命令檢視節點資訊:
[email protected]:~# docker node ls
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
0bw30fkeiredi0fg1pxg710ld *  docker-1  Ready   Active        Leader

新增節點
     執行建立swarm步驟中自動生成的命令去新增節點。如忘記該命令,可通過以下命令查詢:
[email protected]:~# docker swarm join-token worker
To add a worker to this swarm, run the following command:
    docker swarm join \
    –token SWMTKN-1-2hayq3edoqv3lc5chpw23e76r8qp67ctx13dcepghdzu9jgngy-0ji06x1fy8pfunlxdy1p2wfm7 \
    192.168.100.23:2377
 
     修改對應的token資訊
[email protected]:~# docker swarm join-token  –rotate worker
To add a worker to this swarm, run the following command:
    docker swarm join \
    –token SWMTKN-1-42vudaylbg4ma3m5u22krw3ivd1rnbc7kryo3frerxo43jdjdm-2fs6gv0me0t158b0ybt0e6fwf \
    192.168.100.23:2377
     新增節點:
[email protected]:~#     docker swarm join \
>     –token SWMTKN-1-2hayq3edoqv3lc5chpw23e76r8qp67ctx13dcepghdzu9jgngy-0ji06x1fy8pfunlxdy1p2wfm7 \
>     192.168.100.23:2377
This node joined a swarm as a worker.
     節點的升降級
docker node promote node-3 node-2  –將worker升級為manager節點
docker node demote node-3 node-2   — 將manager節點降級為worker節點




在swarm上部署服務
[email protected]:~# docker service create –replicas 1 –name helloworld alpine ping www.baidu.com
5ntljnr8mqu94hvdicnqbsxmb
  • docker service create 命令建立服務
  • –name 指定service 的名字為helloworld
  • –replicas指定執行容器的個數
     檢視服務執行情況:
[email protected]:~# docker service ls
ID            NAME       REPLICAS  IMAGE   COMMAND
5ntljnr8mqu9  helloword  1/1       alpine  ping www.baidu.com
檢查叢集上的服務
[email protected]:~# docker service inspect –pretty helloword
ID:        5ntljnr8mqu94hvdicnqbsxmb
Name:        helloword
Mode:        Replicated
 Replicas:    1
Placement:
UpdateConfig:
 Parallelism:    1
 On failure:    pause
ContainerSpec:
 Image:        alpine
 Args:        ping www.baidu.com
Resources:
     檢視哪些節點執行服務
[email protected]:~# docker service ps helloword
ID                         NAME         IMAGE   NODE      DESIRED STATE  CURRENT STATE           ERROR
5pujmicjjp25mm1w26m3yz1vk  helloword.1  alpine  docker-1  Running        Running 33 minutes ago 
伸縮service的數量
docker service scale <SERVICE-ID>=<NUMBER-OF-TASKS>
     調整helloworld的數量:
[email protected]:~# docker service scale helloword=5
helloword scaled to 5
從swarm中刪除service
[email protected]:~# docker service rm helloword
helloword
滾動更新服務
     建立一個redis服務
$ docker service create \
  –replicas 3 \
  –name redis \
  –update-delay 10s \
  redis:3.0.6
0u6a4s31ybk7yw2wyvtikmu50
     –update-delay : 設定更新的時間間隔,seconds Ts, minutes Tm, or hours Th. So 10m30s indicates a 10 minute 30 second delay.
     –update-parallelism  : 設定每次更新的容器數
     –update-failure-action  : 設定更新失敗之後的操作
      –update-delay、–update-parallelism 、–update-failure-action引數也可以在 update時指定。
$ docker service update –image redis:3.0.7 redis
redis
     
     更新時的步驟:
  • 停止第一個容器
  • 啟動一個容器
  • 如果更新容器返回running,等待設定的時間間隔的時間後,停止下一個容器
  • 如果更新失敗,暫停更新
Drain節點
     node設定為drain之後,節點上的容器會自動停止,然後在其他的可用節點上建立新容器。
docker node update –availability drain worker1
worker1
$ docker node update –availability active worker1
worker1

Service相關命令
     基本引數
docker service create –name helloworld \
  –env MYVAR=myvalue \
  –workdir /tmp \
  –user my_user \
  –replicas 3 \
  –publish 8080:80 \
  –network my-multi-host-network \
  –update-delay 10s \
  –update-parallelism 2 \
  –update-failure-action continue \
  alpine ping docker.com
     volume相關
# type=volume,將容器目錄對映到卷儲存上。docker volume create建立出的卷,可用在此處。
docker service create \
  –mount type=volume,src=<VOLUME-NAME>,dst=<CONTAINER-PATH>,volume-driver=<DRIVER>,volume-opt=<KEY0>=<VALUE0>,volume-opt=<KEY1>=<VALUE1>
  –name myservice \
  <IMAGE>
# type=bind,將容器目錄直接對映在宿主機
docker service create \
  –mount type=bind,src=<HOST-PATH>,dst=<CONTAINER-PATH> \
  –name myservice \
  <IMAGE>