本文首發於個人博客
原文連接:Docker 1.12 新特性javascript
Docker1.12 版本作出了很大的改動,特別是增長了對 swarm 的原生支持,下面對新版的使用作一個總結,供你們查閱。java
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 集羣配置
初始化一個 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)複製代碼
添加節點:
使用 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 swarm leave
命令,可以使得當前節點離開 swarm 集羣。
離開後,經過 ‘ docker node ls` 命令查看節點狀態時,該節點的狀態變爲 down。
更新 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
建立一個服務:
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複製代碼
在使用 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複製代碼
$ 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複製代碼
task 掛掉之後可自動調配從新啓動。
經過命令 docker service scale [servicename]=n
的方式來擴展服務;
也可經過該命令縮容,被縮減的 task (容器)實際是被 stop 了,而非 rm。
經過命令 docker service rm [servicename]
可刪除一個 service 下的所有容器。
更新 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