1. 程式人生 > >docker 1.12 版本 docker swarm 叢集

docker 1.12 版本 docker swarm 叢集

   docker 1.12 版本 的新特性

(1)docker swarm:叢集管理,子命令有init, join, leave, update

(2)docker service:服務建立,子命令有create, inspect, update, remove, tasks

(3)docker node:節點管理,子命令有accept, promote, demote, inspect, update, tasks, ls, rm

(4)docker stack/deploy:試驗特性,用於多應用部署, 類似與 docker-compose 中的特性。


我在使用的時候還是 測試版本,所以使用

wget -qO- https://test.docker.com/ | sh

進行安裝配置

安裝完畢以後:

[[email protected] ~]# 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.12 中 新特性裡面的 內建 swarm 命令 (swarmkit採用raft協議構建叢集)

[[email protected] ~]# 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個

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 叢集,執行效果:

[[email protected] ~]# docker swarm init
Swarm initialized: current node (0vwpni05mew2j84i6gjet44iu) is now a manager.

這裡顯示 初始化了一個 Swarm 叢集,並把這機器做為 管理節點。

[[email protected] ~]#docker node ls
ID                           NAME                   MEMBERSHIP  STATUS  AVAILABILITY  MANAGER STATUS
0vwpni05mew2j84i6gjet44iu *  swarm-manager          Accepted    Ready   Active        Leader

執行 docker node ls 可以檢視 Swarm 的叢集情況 (只能在 manager 中執行)

[[email protected] ~]# 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 節點,也可加入 作為 管理節點。

[[email protected]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 叢集裡

[[email protected] ~]#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 的群集資訊

[[email protected] ~]#docker swarm update
Swarm updated.

4. leave 命令, 離開 Swarm 叢集, 一個docker 只能加入一個node.

[[email protected]1 ~]#docker swarm leave 10.6.0.140:2377  

5. inspect 命令, 查詢 Swarm 叢集 的整體資訊。 (只能在 manager 中執行)

[[email protected] ~]#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
            }
        }
    }
]

二、 接下來我們來看看 service 命令。

[[email protected] ~]#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 命令, 既 建立 一個 服務。

[[email protected] ~]#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 映象 下來 用於 測試

[[email protected] ~]#docker pull nginx

建立 2 個 nginx :

[[email protected] ~]#docker service create --name nginx --replicas 2 -p 80:80/tcp nginx


使用 docker service ls 可檢視 服務 啟動情況。

[[email protected] ~]#docker service ls
ID            NAME   REPLICAS  IMAGE  COMMAND
1b9a58mlz330  nginx  1/2       nginx  


使用 tasks 命令 可檢視 nginx 的情況。

[[email protected] ~]#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 映象。

[[email protected]1 ~]#docker pull nginx


node-1 節點pull 完畢以後,在使用 service ls 檢視, 服務已經自動 啟動了。

Swarm模式下的引擎擁有自組織與自修復特性,意味著它們能夠識別我們定義的應用,並在出現差錯時持續檢查並修復環境。

舉例來說,如果大家關閉某臺執行有Nginx例項的裝置,則另一節點上會自動啟動一套新的容器。

如果關閉Swarm內半數裝置所使用的網路交換機,則另外一半裝置會頂替而上,接管對應工作負載。

[[email protected] ~]#docker service ls
ID            NAME   REPLICAS  IMAGE  COMMAND
1b9a58mlz330  nginx  2/2       nginx
[[email protected] ~]#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個。

[[email protected] ~]#docker service scale nginx=10
nginx scaled to 10


使用 tasks 可以看到,已經在 2個 節點中生成了10個 nginx 容器

[[email protected] ~]#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個。

[[email protected] ~]#docker service scale nginx=2
nginx scaled to 2


在執行 nginx=2 時可以看到 容器已經縮小為 2個 。

當我們使用 docker ps 檢視,會發現容器被 stop 而非 rm 。

當我們使用 docker service rm nginx 的時候,所有的容器都會被 刪除,請注意。

[[email protected] ~]#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 命令。 可對 服務的啟動 引數 進行 更新/修改。

上面我們新建了一個服務,命令為:

[[email protected] ~]#docker service create --name nginx --replicas 2 -p 80:80/tcp nginx

如果我們先新加入了一個 node 想讓 nginx 分佈在 3個 node 上面, 我們可以使用 update 命令。

[[email protected] ~]#docker service update --replicas 3 nginx
nginx


更新完畢以後 我們可以檢視到 REPLICAS 已經變成 3/3

[[email protected] ~]#docker service ls
ID            NAME   REPLICAS  IMAGE  COMMAND
1b9a58mlz330  nginx  3/3       nginx  


docker service update 命令,也可用於直接 升級 映象等。

[[email protected] ~]#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 進行更新。

[[email protected] ~]#docker service update --image nginx:new nginx 
nginx


可以看到 IMAGE 已經變成 nginx:new

[[email protected] ~]#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


三、 下面是 node , node命令用於節點管理:

[[email protected] ~]#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 任務。

四、 docker stack/deploy 目前 stack 還處於 測試階段。

https://github.com/docker/docker/blob/master/experimental/docker-stacks-and-bundles.md

目前 docker 1.12.0-rc2 版本還沒有這個命令, 等待 正式版 的到來。

相關推薦

docker 1.12 版本 docker swarm 叢集

   docker 1.12 版本 的新特性 (1)docker swarm:叢集管理,子命令有init, join, leave, update (2)docker service:服務建立,子命令有create, inspect, update, remove, tasks (3)docker no

Docker 1.12 Swarm叢集實戰(第五章)

補充一些遺漏的問題. 本章主要內容: 使用 constraints 指定 service 約束.service 掛載使用本地volume.ELK日誌平臺使用GELF日誌驅動收集日誌. 1. 指定service約束 在前幾章中, 我們建立的 registry 服務,是由

Docker 1.12 Swarm Mode叢集實戰(第二章)

第二章 建立Swarm叢集 繼續上一章 Docker 1.12 Swarm Mode叢集實戰(第一章) 的內容, 為了產生更多的docker幣,我們需要搭建一個swarm叢集來scale out我們的docker幣應用,解決單節點的效能瓶頸。 2.1 Swarm Mo

Docker 17.12版本安裝

Docker Ubuntu16.04 最新版本Docker安裝手冊 Docker安裝手冊 環境:操作系統:Ubuntu 16.04.3 LTSDocker版本:17.12.1-ce 1、配置IP地址sudo vim /etc/network/interfacesauto ens33iface

Docker 1.12新功能探索(1):centos7上安裝docker1.12

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Docker 1 12新功能探索(1) centos7上安裝docker1 12

docker 1.12是今年docker迄今釋出的最為重要的一個版本,它大大增強了docker的內建編排機制。在一直被詬病的叢集的構成方面也交出了自己的答卷。雖然增加的功能讓你在使用的時候有一種在使用kubernetes的感覺,但這個世界不就是這樣麼,你有的我也有,我有的是原生態。閒話不說

docker-1.12 run命令執行以及引數詳解

以上幾篇內容,我們基本瞭解了docker的image,container,dockerfile的一些資訊 這一篇開始,我們要進入正題了,也就是正式開始入門的我們docker,和使用它。 首先,我們要介紹的第一個命令,也是docker最核心的命令:docker run

[Docker] CentOS 7 離線安裝 Docker 1.12.6

一、  基礎環境             作業系統:CentOS Linux release 7.3.1611 (Core)  64位 二、  安裝步驟     2.1  下載 Docker RPM

Docker 1 12新功能探索(5) 建立服務

通過docker service create建立服務,使用docker service ls確認服務資訊,docker service ps確認詳細執行狀況,更是在create的時候提供了眾多的Option,這些Option在其他流行的編排工具中稍作比較,大多大同小異,使用方便。

Docker 1.12.4 釋出,應用容器引擎

Docker 1.12.4 釋出了,Docker 1.12 版本附帶了更新 rpm 的 systemd 單元檔案(包括 RHEL、Fedora、CentOS 和 Oracle Linux 7 ),當從舊版本的 docker 升級

Docker 1.12.0 改進了服務的負載均衡引數

在最新發布的 1.12.0 版本中,當在 叢集中啟動服務時,Docker 通過 DNS 和 IP 虛擬伺服器(IPVS)為服務的負載均衡引入了新的引數。 新版 Docker 引入了內建的 DNS 伺服器,當啟動一個容器時,可以通過

龍芯Fedora21平臺上解決docker 1.12.2退出問題

http://ask.loongnix.org/?/article/80    作業系統版本 loongnix(Fedora21) 20170726及以前版本,安裝docker 1.12.2後,建立容器正常,但是docker stop容器會阻塞住,容器無法正常退

Docker 1 12新功能探索(7) 服務編排三劍客簡單總結

box ask -o 新功能 tab pri thead csdn 更新 docker內置編排功能和目前成熟的編排工具相比可能還略顯弱勢,但是畢竟它是docker原生態的工具,占有地利的得天獨厚的優勢。同時目前內置swarm/node/service“三劍客”所組成的

Docker 1.12新功能探索(2):新增重大特性

Docker版本的1.12,仔細看來確實有了不少的變化,作為一個小版本號的升級能有如此之多的功能更新可能確實會讓不少追隨者喜出望外。1.12就能如此了,讓人不由得好奇docker到2.0的時候

更改Centos7 Docker 1.12檔案系統為overlay

Centos 系統Docker預設檔案儲存使用devicemapper (loop), 官方建議生產環境下將預設的devicemapper (loop) 方式改為devicemapper (direct-lvm). 本文直接將預設的devicem

轉 centos7使用kubeadm安裝kubernetes 1.12版本

最近在學習go 模板語法  還是有點小忙 !   感覺寫這種 kuberadm 搭建 kubernetes  還是有點水  好吧 可能我太高調了  前前後後搭過四 五次了  ! kuber

k8s升級,HA叢集1.12.0~HA叢集1.13.0

k8s升級,此次升級是1.12.0 至1.13.0 準備 # 首先升級master節點的基礎元件kubeadm、kubelet、kubectl apt-get update && apt-get upgrade kubeadm # 更新到1.13.0後,在master執行,執行一次

Docker(1) 第一個docker windows安裝

1.Docker是一容器的容器,就是把應用程式環境整體打包並可以進行任意環境的移植。 2.Docker的核心技術是映象、倉庫和容器。   docker系統的image層就是映象,這些都是隻讀的 docker容器的本質就是一個程序【虛擬機器】, docker自己

走近Docker---(2)各版本docker的安裝

前言 由於我們常用的是Linux的系統,所以docker學習的文中,主要偏重於Linux系統中docker的學習。 要學習docker,首先要安裝docker。下面介紹的是各種系統中如何安裝docker。 Linux系統 Linux系統的

Canalv1.1.4版本搭建HA叢集

## 前提 `Canal`上一個正式版是於`2019-9-2`釋出的`v1.1.4`,筆者幾個月前把這個版本的`Canal`推上了生產環境,部署了`HA`叢集。過程中雖然遇到不少的坑,但是在不出問題的前提下,`Canal`的作用還是非常明顯的。上週的一次改造上線之後,去掉了原來對業務系統訂單資料通過`Rab