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 Swarmjoin 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