docker 1.12 版本 的新特性html
(1)docker swarm:集羣管理,子命令有init, join, leave, updatenode
(2)docker service:服務建立,子命令有create, inspect, update, remove, taskslinux
(3)docker node:節點管理,子命令有accept, promote, demote, inspect, update, tasks, ls, rmnginx
(4)docker stack/deploy:試驗特性,用於多應用部署, 相似與 docker-compose 中的特性。git
我在使用的時候仍是 測試版本,因此使用 github
wget -qO- https://test.docker.com/ | sh
進行安裝配置web
安裝完畢之後:docker
[root@swarm-manager ~]# docker version Client: Version: 1.12.0-rc2 API version: 1.24 Go version: go1.6.2 Git commit: 906eacd Built: OS/Arch: linux/amd64 Server: Version: 1.12.0-rc2 API version: 1.24 Go version: go1.6.2 Git commit: 906eacd Built: OS/Arch: linux/amd64
1、 咱們首先來看看 1.12 中 新特性裏面的 內置 swarm 命令 (swarmkit採用raft協議構建集羣)網絡
[root@swarm-manager ~]# docker swarm --help Usage: docker swarm COMMAND Manage Docker Swarm Options: --help Print usage Commands: init Initialize a Swarm join Join a Swarm as a node and/or manager update Update the Swarm leave Leave a Swarm inspect Inspect the Swarm Run 'docker swarm COMMAND --help' for more information on a command.
這裏 命令有 5個tcp
Commands:
init Initialize a Swarm
join Join a Swarm as a node and/or manager
update Update the Swarm
leave Leave a Swarm
inspect Inspect the Swarm
1. init 初始化,一個 Swarm 集羣,執行效果:
[root@swarm-manager ~]# docker swarm init
Swarm initialized: current node (0vwpni05mew2j84i6gjet44iu) is now a manager.
這裏顯示 初始化了一個 Swarm 集羣,並把這機器作爲 管理節點。
[root@swarm-manager ~]#docker node ls ID NAME MEMBERSHIP STATUS AVAILABILITY MANAGER STATUS 0vwpni05mew2j84i6gjet44iu * swarm-manager Accepted Ready Active Leader
執行 docker node ls 能夠查看 Swarm 的集羣狀況 (只能在 manager 中執行)
[root@swarm-manager ~]# netstat -lan|grep 2377
能夠看到 羣集開放了一這個 2377 的端口。
默認綁定 0.0.0.0:2377 ,固然咱們也可使用 docker swarm init --listen-addr <MANAGER-IP>:<PORT> 進行綁定ip
2377 這個端口是用於 Swarm 中 node 節點加入使使用的。
2. join 加入 Swarm 集羣, 可加入作爲 node 節點,也可加入 做爲 管理節點。
[root@swarm-node-1 ~]#docker swarm join 10.6.0.140:2377 This node joined a Swarm as a worker.
這裏在 node-1 裏面執行了 join 命令,加入了 10.6.0.140 這個 manager 這個 Swarm 集羣裏
[root@swarm-manager ~]#docker node ls ID NAME MEMBERSHIP STATUS AVAILABILITY MANAGER STATUS 0vwpni05mew2j84i6gjet44iu * swarm-manager Accepted Ready Active Leader 4mqsmp0gzlqeicit98ce8wh2q swarm-node-1 Accepted Ready Active
這裏能夠看到 node-1 已經加入到 swarm 的集羣裏面來了。
3. update 命令, 只提示 updated ,具體做用尚不明白,應該是馬上刷新 swarm 的羣集信息
[root@swarm-manager ~]#docker swarm update
Swarm updated.
4. leave 命令, 離開 Swarm 集羣, 一個docker 只能加入一個node.
[root@swarm-node-1 ~]#docker swarm leave 10.6.0.140:2377
5. inspect 命令, 查詢 Swarm 集羣 的總體信息。 (只能在 manager 中執行)
[root@swarm-manager ~]#docker swarm inspect [ { "ID": "c052zw5ll0ugw08shg2xf7ajp", "Version": { "Index": 11 }, "CreatedAt": "2016-06-23T02:09:18.935434519Z", "UpdatedAt": "2016-06-23T02:09:19.155114277Z", "Spec": { "Name": "default", "AcceptancePolicy": { "Policies": [ { "Role": "worker", "Autoaccept": true }, { "Role": "manager", "Autoaccept": false } ] }, "Orchestration": { "TaskHistoryRetentionLimit": 10 }, "Raft": { "SnapshotInterval": 10000, "LogEntriesForSlowFollowers": 500, "HeartbeatTick": 1, "ElectionTick": 3 }, "Dispatcher": { "HeartbeatPeriod": 5000000000 }, "CAConfig": { "NodeCertExpiry": 7776000000000000 } } } ]
2、 接下來咱們來看看 service 命令。
[root@swarm-manager ~]#docker service --help Usage: docker service COMMAND Manage Docker services Options: --help Print usage Commands: create Create a new service inspect Inspect a service tasks List the tasks of a service ls List services rm Remove a service scale Scale one or multiple services update Update a service Run 'docker service COMMAND --help' for more information on a command.
1. docker create 命令, 既 建立 一個 服務。
[root@swarm-manager ~]#docker service create --help Usage: docker service create [OPTIONS] IMAGE [COMMAND] [ARG...] Create a new service Options: --constraint value Placement constraints (default []) --endpoint-mode string Endpoint mode(Valid values: VIP, 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) --mode string Service mode (replicated or global) (default "replicated") -m, --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 evalulate 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-parallelism uint Maximum number of tasks updated simultaneously -u, --user string Username or UID -w, --workdir string Working directory inside the container
docker service create 裏面有很是多的 參數。 這裏有很詳細的使用說明。
下面咱們來 建立一個 service 試試看
首先pull 一個 nginx 鏡像 下來 用於 測試
[root@swarm-manager ~]#docker pull nginx
建立 2 個 nginx :
[root@swarm-manager ~]#docker service create --name nginx --replicas 2 -p 80:80/tcp nginx
使用 docker service ls 可查看 服務 啓動狀況。
[root@swarm-manager ~]#docker service ls ID NAME REPLICAS IMAGE COMMAND 1b9a58mlz330 nginx 1/2 nginx
使用 tasks 命令 可查看 nginx 的狀況。
[root@swarm-manager ~]#docker service tasks 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
這裏 顯示 swarm-node-1 節點中 last state 的狀態爲 preparing .
緣由是 swarm-node-1 節點並無 nginx 的鏡像
在 node-1 節點pull nginx 鏡像。
[root@swarm-node-1 ~]#docker pull nginx
node-1 節點pull 完畢之後,在使用 service ls 查看, 服務已經自動 啓動了。
Swarm模式下的引擎擁有自組織與自修復特性,意味着它們可以識別咱們定義的應用,並在出現差錯時持續檢查並修復環境。
舉例來講,若是你們關閉某臺運行有Nginx實例的設備,則另外一節點上會自動啓動一套新的容器。
若是關閉Swarm內半數設備所使用的網絡交換機,則另一半設備會頂替而上,接管對應工做負載。
[root@swarm-manager ~]#docker service ls ID NAME REPLICAS IMAGE COMMAND 1b9a58mlz330 nginx 2/2 nginx
[root@swarm-manager ~]#docker service tasks nginx ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE 56er48j3hin9ysdi3sb1chbn1 nginx.1 nginx nginx Running 32 minutes Running swarm-node-1 e7vtvpkbstznoi8ogihaao1f5 nginx.2 nginx nginx Running 32 minutes Running swarm-manager
2. docker service scale 命令, 這個命令是批量生成已有容器。
直接對 nginx=10 既可以讓 nginx 的容器生成10個。
[root@swarm-manager ~]#docker service scale nginx=10 nginx scaled to 10
使用 tasks 能夠看到,已經在 2個 節點中生成了10個 nginx 容器
[root@swarm-manager ~]#docker service tasks nginx ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE 56er48j3hin9ysdi3sb1chbn1 nginx.1 nginx nginx Running 43 minutes Running swarm-node-1 e7vtvpkbstznoi8ogihaao1f5 nginx.2 nginx nginx Running 43 minutes Running swarm-manager 9vqxcmskj1nawo8wl0fqr32j2 nginx.3 nginx nginx Preparing 20 seconds Running swarm-manager 0vbqoyestm7ob6r1zq9jwj6il nginx.4 nginx nginx Running 20 seconds Running swarm-node-1 13jf9mkl4k5e57pq4hoeb68ru nginx.5 nginx nginx Running 20 seconds Running swarm-node-1 a0tk6ni6a02diuo5u3t870qk7 nginx.6 nginx nginx Running 20 seconds Running swarm-manager cwplvo5wfqp3rn5ynvxv9wv90 nginx.7 nginx nginx Running 20 seconds Running swarm-manager 7feil5xqc5hdkseasthkq2nyx nginx.8 nginx nginx Running 20 seconds Running swarm-node-1 8jt5yovxoz7t89edinb9ydao1 nginx.9 nginx nginx Starting 20 seconds Running swarm-node-1 dst4ydun1upham0o7e8a9hj3w nginx.10 nginx nginx Running 20 seconds Running swarm-manager
當咱們想 縮容 時間, 也可使用 scale nginx=2 讓容器變成2個。
[root@swarm-manager ~]#docker service scale nginx=2 nginx scaled to 2
在運行 nginx=2 時能夠看到 容器已經縮小爲 2個 。
當咱們使用 docker ps 查看,會發現容器被 stop 而非 rm 。
當咱們使用 docker service rm nginx 的時候,全部的容器都會被 刪除,請注意。
[root@swarm-manager ~]#docker service tasks nginx ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE 0vbqoyestm7ob6r1zq9jwj6il nginx.4 nginx nginx Running 12 minutes Running swarm-node-1 13jf9mkl4k5e57pq4hoeb68ru nginx.5 nginx nginx Running 12 minutes Running swarm-node-1
3. docker service update 命令。 可對 服務的啓動 參數 進行 更新/修改。
上面咱們新建了一個服務,命令爲:
[root@swarm-manager ~]#docker service create --name nginx --replicas 2 -p 80:80/tcp nginx
若是咱們先新加入了一個 node 想讓 nginx 分佈在 3個 node 上面, 咱們可使用 update 命令。
[root@swarm-manager ~]#docker service update --replicas 3 nginx nginx
更新完畢之後 咱們能夠查看到 REPLICAS 已經變成 3/3
[root@swarm-manager ~]#docker service ls ID NAME REPLICAS IMAGE COMMAND 1b9a58mlz330 nginx 3/3 nginx
docker service update 命令,也可用於直接 升級 鏡像等。
[root@swarm-manager ~]#docker service tasks nginx ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE 0vbqoyestm7ob6r1zq9jwj6il nginx.4 nginx nginx Running 41 minutes Running swarm-node-1 340e1u31vadq3jtebzeddmatt nginx.5 nginx nginx Preparing 5 seconds Running swarm-manager
上面咱們使用了 nginx 鏡像啓動了 任務。 使用 update --image 可直接對 image 進行更新。
[root@swarm-manager ~]#docker service update --image nginx:new nginx
nginx
能夠看到 IMAGE 已經變成 nginx:new
[root@swarm-manager ~]#docker service tasks nginx ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE 2ba3utpk6icf0w449kcwgxmnm nginx.4 nginx nginx:new Running 49 seconds Running swarm-manager 5wmmneiueeool09fs8d2g1ncq nginx.5 nginx nginx:new Running 49 seconds Running swarm-node-1
掛載目錄, mount
docker service create --mount type=bind,target=/container_data/,source=/host_data/ 例 - 本地目錄: target = 容器裏面的路徑, source = 本地硬盤路徑 docker service create --name nginx --mount type=bind,target=/usr/share/nginx/html/,source=/opt/web/ --replicas 2 --publish 80:80/tcp nginx
docker service create --mount type=volume,source=<VOLUME-NAME>,target=<CONTAINER-PATH>,volume-driver=<DRIVER>, 例 - 掛載volume卷: source = volume 名稱 , traget = 容器裏面的路徑 docker service create --name nginx --mount type=volume,source=myvolume,target=/usr/share/nginx/html,volume-driver=local --replicas 2 --publish 80:80/tcp nginx
3、 下面是 node , node命令用於節點管理:
[root@swarm-manager ~]#docker node --help Usage: docker node COMMAND Manage Docker Swarm nodes Options: --help Print usage Commands: accept Accept a node in the swarm demote Demote a node from manager in the swarm inspect Inspect a node in the swarm ls List nodes in the swarm promote Promote a node to a manager in the swarm rm Remove a node from the swarm tasks List tasks running on a node update Update a node Run 'docker node COMMAND --help' for more information on a command.
1. 首先是 docker node accept 命令, 這個命令用於 贊成 申請加入 swarm 集羣。
在使用 docker swarm init 的時候,若是使用了 --auto-accept none 的話,須要使用 docker node accept 來經過申請。
在沒有經過申請以前,節點 MEMBERSHIP 狀態爲 Pending 狀態。
--auto-accept 能夠設置三種角色 分別爲 (worker, manager, or none) 。
使用 docker node accept + 節點 ID 既可經過申請。
2. docker node promote 與 docker node demote 命令。
docker node promote 是 將 worker 普通節點,提高爲 manager 節點。
docker node demote 是 將 manager 管理節點,降級爲 worker 節點。
3. docker node inspect 可查看節點的具體信息
docker node rm 可刪除一個節點
docker node tasks 可查看節點中運行的 service 任務。
4、 docker stack/deploy 目前 stack 還處於 測試階段。
https://github.com/docker/docker/blob/master/experimental/docker-stacks-and-bundles.md
目前 docker 1.12.0-rc2 版本尚未這個命令, 等待 正式版 的到來。