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
进行安装配置
安装完毕以后:
[root@swarm-manager ~]# docker version
Client:
Version: 1.12.-rc2
API version: 1.24
Go version: go1.6.2
Git commit: 906eacd
Built:
OS/Arch: linux/amd64 Server:
Version: 1.12.-rc2
API version: 1.24
Go version: go1.6.2
Git commit: 906eacd
Built:
OS/Arch: linux/amd64
一、 我们首先来看看 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个
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 的端口。
默认绑定 0.0.0.0:2377 ,当然我们也可以使用 docker swarm init --listen-addr <MANAGER-IP>:<PORT> 进行绑定ip
2377 这个端口是用于 Swarm 中 node 节点加入使使用的。
2. join 加入 Swarm 集群, 可加入做为 node 节点,也可加入 作为 管理节点。
[root@swarm-node- ~]#docker swarm join 10.6.0.140:
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- 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- ~]#docker swarm leave 10.6.0.140:
5. inspect 命令, 查询 Swarm 集群 的整体信息。 (只能在 manager 中执行)
[root@swarm-manager ~]#docker swarm inspect
[
{
"ID": "c052zw5ll0ugw08shg2xf7ajp",
"Version": {
"Index":
},
"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":
},
"Raft": {
"SnapshotInterval": ,
"LogEntriesForSlowFollowers": ,
"HeartbeatTick": ,
"ElectionTick":
},
"Dispatcher": {
"HeartbeatPeriod":
},
"CAConfig": {
"NodeCertExpiry":
}
}
}
]
二、 接下来我们来看看 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 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 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 -p :/tcp nginx
使用 docker service ls 可查看 服务 启动情况。
[root@swarm-manager ~]#docker service ls
ID NAME REPLICAS IMAGE COMMAND
1b9a58mlz330 nginx / nginx
使用 tasks 命令 可查看 nginx 的情况。
[root@swarm-manager ~]#docker service tasks nginx
ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE
56er48j3hin9ysdi3sb1chbn1 nginx. nginx nginx Preparing minutes Running swarm-node-
e7vtvpkbstznoi8ogihaao1f5 nginx. nginx nginx Running minutes Running swarm-manager
这里 显示 swarm-node-1 节点中 last state 的状态为 preparing .
原因是 swarm-node-1 节点并没有 nginx 的镜像
在 node-1 节点pull nginx 镜像。
[root@swarm-node- ~]#docker pull nginx
node-1 节点pull 完毕以后,在使用 service ls 查看, 服务已经自动 启动了。
Swarm模式下的引擎拥有自组织与自修复特性,意味着它们能够识别我们定义的应用,并在出现差错时持续检查并修复环境。
举例来说,如果大家关闭某台运行有Nginx实例的设备,则另一节点上会自动启动一套新的容器。
如果关闭Swarm内半数设备所使用的网络交换机,则另外一半设备会顶替而上,接管对应工作负载。
[root@swarm-manager ~]#docker service ls
ID NAME REPLICAS IMAGE COMMAND
1b9a58mlz330 nginx / nginx
[root@swarm-manager ~]#docker service tasks nginx
ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE
56er48j3hin9ysdi3sb1chbn1 nginx. nginx nginx Running minutes Running swarm-node-
e7vtvpkbstznoi8ogihaao1f5 nginx. nginx nginx Running minutes Running swarm-manager
2. docker service scale 命令, 这个命令是批量生成已有容器。
直接对 nginx=10 既可让 nginx 的容器生成10个。
[root@swarm-manager ~]#docker service scale nginx=
nginx scaled to
使用 tasks 可以看到,已经在 2个 节点中生成了10个 nginx 容器
[root@swarm-manager ~]#docker service tasks nginx
ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE
56er48j3hin9ysdi3sb1chbn1 nginx. nginx nginx Running minutes Running swarm-node-
e7vtvpkbstznoi8ogihaao1f5 nginx. nginx nginx Running minutes Running swarm-manager
9vqxcmskj1nawo8wl0fqr32j2 nginx. nginx nginx Preparing seconds Running swarm-manager
0vbqoyestm7ob6r1zq9jwj6il nginx. nginx nginx Running seconds Running swarm-node-
13jf9mkl4k5e57pq4hoeb68ru nginx. nginx nginx Running seconds Running swarm-node-
a0tk6ni6a02diuo5u3t870qk7 nginx. nginx nginx Running seconds Running swarm-manager
cwplvo5wfqp3rn5ynvxv9wv90 nginx. nginx nginx Running seconds Running swarm-manager
7feil5xqc5hdkseasthkq2nyx nginx. nginx nginx Running seconds Running swarm-node-
8jt5yovxoz7t89edinb9ydao1 nginx. nginx nginx Starting seconds Running swarm-node-
dst4ydun1upham0o7e8a9hj3w nginx. nginx nginx Running seconds Running swarm-manager
当我们想 缩容 时间, 也可以使用 scale nginx=2 让容器变成2个。
[root@swarm-manager ~]#docker service scale nginx=
nginx scaled to
在运行 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. nginx nginx Running minutes Running swarm-node-
13jf9mkl4k5e57pq4hoeb68ru nginx. nginx nginx Running minutes Running swarm-node-
3. docker service update 命令。 可对 服务的启动 参数 进行 更新/修改。
上面我们新建了一个服务,命令为:
[root@swarm-manager ~]#docker service create --name nginx --replicas -p :/tcp nginx
如果我们先新加入了一个 node 想让 nginx 分布在 3个 node 上面, 我们可以使用 update 命令。
[root@swarm-manager ~]#docker service update --replicas nginx
nginx
更新完毕以后 我们可以查看到 REPLICAS 已经变成 3/3
[root@swarm-manager ~]#docker service ls
ID NAME REPLICAS IMAGE COMMAND
1b9a58mlz330 nginx / nginx
docker service update 命令,也可用于直接 升级 镜像等。
[root@swarm-manager ~]#docker service tasks nginx
ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE
0vbqoyestm7ob6r1zq9jwj6il nginx. nginx nginx Running minutes Running swarm-node-
340e1u31vadq3jtebzeddmatt nginx. nginx nginx Preparing 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. nginx nginx:new Running seconds Running swarm-manager
5wmmneiueeool09fs8d2g1ncq nginx. nginx nginx:new Running seconds Running swarm-node-
挂载目录, 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命令用于节点管理:
[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 任务。
四、 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 集群的更多相关文章
- Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例
目录 [TOC] 1.环境准备 本文中的案例会有四台机器,他们的Host和IP地址如下 c1 -> 10.0.0.31 c2 -> 10.0.0.32 c3 -> 10.0.0. ...
- [转载] Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例
1.环境准备 本文中的案例会有四台机器,他们的Host和IP地址如下 c1 -> 10.0.0.31 c2 -> 10.0.0.32 c3 -> 10.0.0.33 c4 -&g ...
- Docker swarm集群搭建教程
一.什么是Swarm Swarm这个项目名称特别贴切.在Wiki的解释中,Swarm behavior是指动物的群集行为.比如我们常见的蜂群,鱼群,秋天往南飞的雁群都可以称作Swarm behavio ...
- DOCKER 学习笔记8 Docker Swarm 集群搭建
前言 在前面的文章中,已经介绍如何在本地通过Docker Machine 创建虚拟Docker 主机,以及也可以在本地Windows 创建虚拟主机,也是可以使用的.这一节,我们将继续学习 Docker ...
- Shell脚本实现---Swarm集群部署实例(Swarm Cluster)
Shell脚本实现---Swarm集群部署实例(Swarm Cluster) 一.机器环境(均是centos7.8) IP hostname 角色 192.168.10.200 manager-swa ...
- 基于zookeeper的Swarm集群搭建
简介 Swarm:docker原生的集群管理工具,将一组docker主机作为一个虚拟的docker主机来管理. 对客户端而言,Swarm集群就像是另一台普通的docker主机. Swarm集群中的每台 ...
- 如何创建 Swarm 集群?- 每天5分钟玩转 Docker 容器技术(95)
本节我们将创建三节点的 swarm 集群. swarm-manager 是 manager node,swarm-worker1 和 swarm-worker2 是 worker node. 所有节点 ...
- 云计算之路-阿里云上:节点 CPU 波动引发 docker swarm 集群故障
非常抱歉,今天 10:05-10:20 左右,我们用阿里云服务器搭建的 docker swarm 集群又出现故障,又是因为突然的节点 CPU 波动. 受这次故障影响的站点有 闪存,博问,班级,园子,短 ...
- Docker系列之swarm集群搭建
学习Docker很久了,今天分享一下Docker的swarm集群的搭建过程很简单 首先第一步是 每台机器上面都要安装docker 本人使用的是centos7操作系统,使用3太虚拟机,3太虚拟机必须网络 ...
随机推荐
- 删除 mysql 日志文件后 ,启动出错
把 mysql-bin.index 里面的索引全部删除
- SDCycleScrollView 添加初始滚动页码
最近在做一个无限轮播界面,由于自己写的有些卡顿,所以我使用了第三方框架SDCycleScrollView,但是我的初始滚动页不是从第一页开始怎么办,我想从第二页,第三页,或者最后一页,关于这个SDCy ...
- 自定义AccessDeniedHandler
在Spring默认的AccessDeniedHandler中只有对页面请求的处理,而没有对Ajax的处理.而在项目开发是Ajax又是我们要常用的技术,所以我们可以通过自定义AccessDeniedHa ...
- 四维dp 或者 剪枝 + dfs Codeforces Beta Round #6 (Div. 2 Only) D
http://codeforces.com/contest/6/problem/D 题目大意:有一队人,排成一列,每个人都有生命值,你每次可以攻击2~n位置的一个的人,假设每次攻击的位置为pos,那么 ...
- Git如何删除版本库中的一个提交?
如果不小心增加了一个最新的提交,可以通过以下的操作删除,记住:是删除最新的提交,如果回滚到其他的提交上面,就会导致之后的全部消失. 1.git reset --hard HEAD~1 2.gi ...
- 笨方法学python--简介
该章提到编程新手所需的三种最重要的技术:读和写,注重细节,发现不同. 读 和 写 即熟悉代码中的各种字符. 注 重 细 节 将例子一字不差地打出来,通过实践训练自己 发 现 不 同 这个是通过长年累月 ...
- 【servlet】客户端是否可以访问到WEB-INF下的jsp文件
一般情况下(不考虑出现安全问题被入侵,那样啥都能访问到),WEB-INF下的jsp文件单凭浏览器端请求时访问不到的. 想访问的话需要通过服务端servlet的转发. 下面通过转发和重定向的尝试来观察访 ...
- HDU 5652 India and China Origins 二分优化+BFS剪枝
题目大意:给你一个地图0代表可以通过1代表不可以通过.只要能从第一行走到最后一行,那么中国与印度是可以联通的.现在给你q个点,每年风沙会按顺序侵蚀这个点,使改点不可通过.问几年后中国与印度不连通.若一 ...
- GDB调试程序常用命令
1.在xv6 内核中 通过 nm kernel | grep _start 找到kernel的起始地址是0010000c 8010b50c D _binary_entryother_start 801 ...
- 在DLL中导出另一静态库中的函数
开发环境: win7_x64.VS2013 应用场景: 动态库A依赖动态库B,而动态库B又使用了静态库C:有些情况下,我们需要将C从B里面导出,然后提供给A使用. 正文: Step1: 1.新建测试静 ...