Docker 1.12 : 使用 Swarm 的新姿式

本文首發於個人博客
原文連接:Docker 1.12 新特性javascript

Docker1.12 版本作出了很大的改動,特別是增長了對 swarm 的原生支持,下面對新版的使用作一個總結,供你們查閱。java

docker 1.12 版本新特性

  • docker swarm:集羣管理,子命令有init, join, leave, updatenode

  • docker service:服務建立,子命令有create, inspect, update, removenginx

  • docker node:節點管理,子命令有accept, promote, demote, inspect, update, tasks, ls, rmredis

  • docker stack/deploy:試驗特性,用於多應用部署, 相似與 docker-compose 中的特性。docker

如何升級?

$ curl -fsSL https://get.docker.com/ | sh
$ systemctl restart docker複製代碼

集羣管理

docker swarmubuntu

  • init 初始化 Swarm 集羣curl

  • join 加入 Swarm 集羣tcp

  • leave 離開 Swarm 集羣ide

  • update 更新 Swarm 集羣配置

docker swarm init

初始化一個 swarm 集羣:

$ docker swarm init
Swarm initialized: current node (0vwpni05mew2j84i6gjet44iu) is now a manager.複製代碼

若是你的機器有多塊網卡,則須要指定 ip 地址:

$ docker swarm init --advertise-addr 192.168.96.187複製代碼

命令執行事後會返回其餘節點加入時須要的 token,這個 token 也可使用 docker swarm join-token 命令查看。

參數:

--advertise-addr string           Advertised address (format: <ip|interface>[:port])
      --cert-expiry duration            Validity period for node certificates (default 2160h0m0s)
      --dispatcher-heartbeat duration   Dispatcher heartbeat period (default 5s)
      --external-ca value               Specifications of one or more certificate signing endpoints
      --force-new-cluster               Force create a new cluster from current state.
      --help                            Print usage
      --listen-addr value               Listen address (format: <ip|interface>[:port]) (default 0.0.0.0:2377)
      --task-history-limit int          Task history retention limit (default 5)複製代碼

docker swarm join

添加節點:

使用 init 時生成的 token 進行節點的添加, 添加 worker 和 manager 節點的 token 是不一樣的。
具體能夠在初始節點上經過 docker swarm join-token (worker|manager) 命令查詢。
具體命令形如:

docker swarm join \
    --token SWMTKN-1-1pk90rlt0iaoqfr7kvq8qyi38n8it7tthzfv8e19l545e6uzql-1l1mhad32fcchvuhz4kjap2zd \
    192.168.96.187:2377複製代碼

添加過之後能夠經過 docker node ls 查看當前集羣節點狀態。

docker node ls

docker swarm leave

刪除節點:

在某個節點上使用 docker swarm leave 命令,可以使得當前節點離開 swarm 集羣。
離開後,經過 ‘ docker node ls` 命令查看節點狀態時,該節點的狀態變爲 down

docker swarm update

更新 swarm 集羣參數,具體參數和 init 命令的參數一致。

參數:

--cert-expiry duration            Validity period for node certificates (default 2160h0m0s)
      --dispatcher-heartbeat duration   Dispatcher heartbeat period (default 5s)
      --external-ca value               Specifications of one or more certificate signing endpoints
      --help                            Print usage
      --task-history-limit int          Task history retention limit (default 5)複製代碼

服務管理

docker service

  • create 新建服務
  • inspect 顯示服務的詳細信息
  • ps 列出服務的全部任務(實例)
  • ls 列出全部服務
  • rm 移除服務
  • scale 改變服務的實例數
  • update 更新服務配置

docker service create

建立一個服務:

Options:
      --constraint value               Placement constraints (default [])
      --container-label value          Container labels (default [])
      --endpoint-mode string           Endpoint mode (vip or dnsrr)
  -e, --env value                      Set environment variables (default [])
      --help                           Print usage
  -l, --label value                    Service labels (default [])
      --limit-cpu value                Limit CPUs (default 0.000)
      --limit-memory value             Limit Memory (default 0 B)
      --log-driver string              Logging driver for service
      --log-opt value                  Logging driver options (default [])
      --mode string                    Service mode (replicated or global) (default "replicated")
      --mount value                    Attach a mount to the service
      --name string                    Service name
      --network value                  Network attachments (default [])
  -p, --publish value                  Publish a port as a node port (default [])
      --replicas value                 Number of tasks (default none)
      --reserve-cpu value              Reserve CPUs (default 0.000)
      --reserve-memory value           Reserve Memory (default 0 B)
      --restart-condition string       Restart when condition is met (none, on-failure, or any)
      --restart-delay value            Delay between restart attempts (default none)
      --restart-max-attempts value     Maximum number of restarts before giving up (default none)
      --restart-window value           Window used to evaluate the restart policy (default none)
      --stop-grace-period value        Time to wait before force killing a container (default none)
      --update-delay duration          Delay between updates
      --update-failure-action string   Action on update failure (pause|continue) (default "pause")
      --update-parallelism uint        Maximum number of tasks updated simultaneously (0 to update all at once) (default 1)
  -u, --user string                    Username or UID
      --with-registry-auth             Send registry authentication details to swarm agents
  -w, --workdir string                 Working directory inside the container複製代碼

service 和 task 的區別

在使用 docker service create 命令的時候若是添加了 --replicas 參數,也就是副本數大於1時,每一個實例就是一個 task 。

$docker service create --name nginx --replicas 2 -p 80:80/tcp nginx

$docker service ls

ID            NAME   REPLICAS  IMAGE  COMMAND
1b9a58mlz330  nginx  1/2       nginx  

$docker service ps nginx
ID                         NAME     SERVICE  IMAGE  LAST STATE           DESIRED STATE  NODE
56er48j3hin9ysdi3sb1chbn1  nginx.1  nginx    nginx  Preparing 2 minutes  Running        swarm-node-1
e7vtvpkbstznoi8ogihaao1f5  nginx.2  nginx    nginx  Running 2 minutes    Running        swarm-manager複製代碼

建立一個帶 rolling update 策略的服務

$ docker service create \
  --replicas 10 \
  --name redis \
  --update-delay 10s \
  --update-parallelism 2 \
  redis:3.0.6複製代碼

當服務更新時,則按照每10秒鐘更新兩個實例的策略進行更新。

設置環境變量

$ docker service create --name redis_2 --replicas 5 --env MYVAR=foo redis:3.0.6複製代碼

爲服務設置標籤

$ docker service create \
  --name redis_2 \
  --label com.example.foo="bar"
  --label bar=baz \
  redis:3.0.6複製代碼

設置模式

$ docker service create --name redis_2 --mode global redis:3.0.6複製代碼

設定調度規則

node attribute matches example
node.id node ID node.id == 2ivku8v2gvtg4
node.hostname node hostname node.hostname != node-2
node.role node role: manager node.role == manager
node.labels user defined node labels node.labels.security == high
engine.labels Docker Engine’s labels engine.labels.operatingsystem == ubuntu 14.04

例如:

$ docker service create \
  --name redis_2 \
  --label com.example.foo="bar"
  --label bar=baz \
  redis:3.0.6複製代碼

具有 reschedule 的功能

task 掛掉之後可自動調配從新啓動。

docker service scale

經過命令 docker service scale [servicename]=n 的方式來擴展服務;
也可經過該命令縮容,被縮減的 task (容器)實際是被 stop 了,而非 rm。

docker service rm

經過命令 docker service rm [servicename] 可刪除一個 service 下的所有容器。

docker service update

更新 service 參數。

參數:

--args string                    Service command args
      --constraint-add value           Add or update placement constraints (default [])
      --constraint-rm value            Remove a constraint (default [])
      --container-label-add value      Add or update container labels (default [])
      --container-label-rm value       Remove a container label by its key (default [])
      --endpoint-mode string           Endpoint mode (vip or dnsrr)
      --env-add value                  Add or update environment variables (default [])
      --env-rm value                   Remove an environment variable (default [])
      --help                           Print usage
      --image string                   Service image tag
      --label-add value                Add or update service labels (default [])
      --label-rm value                 Remove a label by its key (default [])
      --limit-cpu value                Limit CPUs (default 0.000)
      --limit-memory value             Limit Memory (default 0 B)
      --log-driver string              Logging driver for service
      --log-opt value                  Logging driver options (default [])
      --mount-add value                Add or update a mount on a service
      --mount-rm value                 Remove a mount by its target path (default [])
      --name string                    Service name
      --network-add value              Add or update network attachments (default [])
      --network-rm value               Remove a network by name (default [])
      --publish-add value              Add or update a published port (default [])
      --publish-rm value               Remove a published port by its target port (default [])
      --replicas value                 Number of tasks (default none)
      --reserve-cpu value              Reserve CPUs (default 0.000)
      --reserve-memory value           Reserve Memory (default 0 B)
      --restart-condition string       Restart when condition is met (none, on-failure, or any)
      --restart-delay value            Delay between restart attempts (default none)
      --restart-max-attempts value     Maximum number of restarts before giving up (default none)
      --restart-window value           Window used to evaluate the restart policy (default none)
      --stop-grace-period value        Time to wait before force killing a container (default none)
      --update-delay duration          Delay between updates
      --update-failure-action string   Action on update failure (pause|continue) (default "pause")
      --update-parallelism uint        Maximum number of tasks updated simultaneously (0 to update all at once) (default 1)
  -u, --user string                    Username or UID
      --with-registry-auth             Send registry authentication details to swarm agents
  -w, --workdir string                 Working directory inside the container複製代碼

節點管理

docker node

  • demote 給節點降級(從manager到worker)
  • inspect 顯示節點詳情
  • ls 列出 Swarm 集羣中全部節點
  • promote 給節點升級(從worker到managere)
  • rm 將節點從 Swarm 集羣移除
  • ps 列出某個節點上運行的全部任務
  • update 更新一個節點的配置
相關文章
相關標籤/搜索