docker 1.12 版本 docker swarm 集羣

   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 版本尚未這個命令, 等待 正式版 的到來。

相關文章
相關標籤/搜索