type	必选项,1表示container,2表示swarm stack,3表示compose stack
title 必选项
description 必选项
image 必选项,该应用使用的docker镜像
administrator_only 可选项,是否只有管理员可用模板
name 可选项,该模板在管理界面中显示的名称
log 可选项,自定义的logo
registry 可选项,docker镜像的仓库,默认是Dockerhub
command 可选项,容器里面运行的命令,如果没有指定,则默认运行dockerfile的command
network 可选项,模板使用的网络
volumes 可选项,模板使用的volume
ports 可选项,模板exposed的端口
labels 可选项,模板上定义的labels
privileged 可选项,容器是否能在超级权限启动
interactive 可选项,容器启动时是否是交互模式,即添加-i -t
restart_policy 可选项,容器的重启策略
hostname 可选项,容器的主机名
note 可选项,关于模板的信息
platform 可选项,支持的平台,一般是linux或者windows
categories 可选项,模板的类别,可以在UI上通过category来过滤

  

primary     初级的
Dashboard 仪表板
App Templates 应用程序模板
Stacks 堆栈
Containers 容器
Volumes 卷
Secrets 秘密
Extensions 扩展
Endpoints 端点
Registries 注册处

  

然后在manager-node管理节点上看一下集群节点的状态:

[root@manager-node ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
1gi8utvhu4rxy8oxar2g7h6gr * manager-node Ready Active Leader
ei53e7o7jf0g36329r3szu4fi node1 Ready Active
f1obgtudnykg51xzyj5fs1aev node2 Ready Active

 

温馨提示:更改节点的availablity状态

availability状态active、drain,其中:

active:node可以接受来自manager节点的任务分派;
drain:ode节点会结束task,且不再接受来自manager节点的任务分派(也就是下线节点)。
当状态改为drain后,那么该节点就不再接受任务分发,就算之前已经接受的任务也会转移到别的节点上。
 
[root@manager-node ~]# docker node update --availability drain node1    #将node1节点下线
[root@manager-node ~]# docker node update --availability active node1 #将下线的节点再次上线
[root@manager-node ~]# docker node rm --force node1 #删除node1节点

  

Docker 1.12版本提供服务的Scaling、health check、滚动升级等功能,并提供了内置的dns、vip机制,实现service的服务发现和负载均衡能力。

 在启动容器之前,先来创建一个覆盖网络,用来保证在不同主机上的容器网络互通的网络模式
[root@manager-node ~]# docker network create -d overlay ngx_net
[root@manager-node ~]# docker network ls
。。。
3ye6vfp996i6 ngx_net overlay swarm
。。。

  

在manager-node节点上使用上面这个覆盖网络创建nginx服务:

#这个命令执行后会自动下载这个容器镜像(比如此处创建tomcat容器,就将下面命令中的镜像改为tomcat镜像)。
#创建具有一个副本(--replicas 1 )的nginx服务,使用镜像nginx
[root@manager-node ~]# docker service create --replicas 1 --network ngx_net --name my-test -p 80:80 nginx

使用 docker service ls 查看正在运行的服务的列表

[root@manager-node ~]# docker service ls
ID NAME REPLICAS IMAGE COMMAND
0jb5eebo8j9q my-test 1/1 nginx

  

查询Swarm中服务的信息

--pretty 使命令输出格式化为可读的格式,不加 --pretty 可以输出更详细的信息:

[root@manager-node ~]# docker service inspect --pretty my-test
ID: 0jb5eebo8j9qb1zc795vx3py3
Name: my-test
Mode: Replicated
Replicas: 1
Placement:
UpdateConfig:
Parallelism: 1
On failure: pause
ContainerSpec:
Image: nginx
Resources:
Networks: 3ye6vfp996i6eq17tue0c2jv9
Ports:
Protocol = tcp
TargetPort = 80
PublishedPort = 80

  

查询到哪个节点正在运行该服务。如下该容器被调度到manager-node节点上启动了,然后访问http://182.48.115.237即可访问这个容器应用(如果调度到其他节点,访问也是如此)
[root@manager-node ~]# docker service ps my-test
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
2m8qqpoa0dpeua5jbgz1infuy my-test.1 nginx manager-node Running Running 3 minutes ago 注意,如果上面命令执行后,上面的 STATE 字段中刚开始的服务状态为 Preparing,需要等一会才能变为 Running 状态,其中最费时间的应该是下载镜像的过程。
有上面命令可知,该服务在manager-node节点上运行。登陆该节点,可以查看到nginx容器在运行中
[root@manager-node ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1ea1d72007da nginx:latest "nginx -g 'daemon off" 4 minutes ago Up 4 minutes 80/tcp my-test.1.2m8qqpoa0dpeua5jbgz1infuy

  

-----------------------------------------------------------在Swarm中动态扩展服务(scale)-----------------------------------------------------------

当然,如果只是通过service启动容器,swarm也算不上什么新鲜东西了。Service还提供了复制(类似kubernetes里的副本)功能。可以通过 docker service scale 命令来设置服务中容器的副本数:

比如将上面的my-test容器动态扩展到5个,命令如下:
[root@manager-node ~]# docker service scale my-test=5 和创建服务一样,增加scale数之后,将会创建新的容器,这些新启动的容器也会经历从准备到运行的过程,过一分钟左右,服务应该就会启动完成,这时候可以再来看一下 nginx 服务中的容器
[root@manager-node ~]# docker service ps my-test
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
2m8qqpoa0dpeua5jbgz1infuy my-test.1 nginx manager-node Running Running 9 minutes ago
aqko8yhmdj53gmzs8gqhoylc2 my-test.2 nginx node2 Running Running 2 minutes ago
erqk394hd4ay7nfwgaz4zp3s0 my-test.3 nginx node1 Running Running 2 minutes ago
2dslg6w16wzcgboa2hxw1c6k1 my-test.4 nginx node1 Running Running 2 minutes ago
bmyddndlx6xi18hx4yinpakf3 my-test.5 nginx manager-node Running Running 2 minutes ago 可以看到,之前my-test容器只在manager-node节点上有一个实例,而现在又增加了4个实例。
这5个副本的my-test容器分别运行在这三个节点上,登陆这三个节点,就会发现已经存在运行着的my-test容器。 ----------------------------------------------------------------------------------------

  

-------------
特别需要清楚的一点:
如果一个节点宕机了(即该节点就会从swarm集群中被踢出),则Docker应该会将在该节点运行的容器,调度到其他节点,以满足指定数量的副本保持运行状态。 比如:
将node1宕机后或将node1的docker服务关闭,那么它上面的task实例就会转移到别的节点上。当node1节点恢复后,它转移出去的task实例不会主动转移回来,
只能等别的节点出现故障后转移task实例到它的上面。使用命令"docker node ls",发现node1节点已不在swarm集群中了。 然后过一会查询服务的状态列表
[root@manager-node ~]# docker service ps my-test
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
2m8qqpoa0dpeua5jbgz1infuy my-test.1 docker.io/nginx manager-node Running Running 33 minutes ago
aqko8yhmdj53gmzs8gqhoylc2 my-test.2 docker.io/nginx node2 Running Running 26 minutes ago
di99oj7l9x6firw1ai25sewwc my-test.3 docker.io/nginx node2 Running Running 6 minutes ago
erqk394hd4ay7nfwgaz4zp3s0 \_ my-test.3 docker.io/nginx node1 Shutdown Complete 5 minutes ago
aibl3u3pph3fartub0mhwxvzr my-test.4 docker.io/nginx node2 Running Running 6 minutes ago
2dslg6w16wzcgboa2hxw1c6k1 \_ my-test.4 docker.io/nginx node1 Shutdown Complete 5 minutes ago
bmyddndlx6xi18hx4yinpakf3 my-test.5 docker.io/nginx manager-node Running Running 26 minutes ago 发现,node1节点出现故障后,它上面之前的两个task任务已经转移到node2节点上了。
登陆到node2节点上,可以看到这两个运行的task任务。当访问182.48.115.239节点的80端口,swarm的负载均衡会把请求路由到一个任意节点的可用的容器上。
[root@node2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
216abf6bebea docker.io/nginx:latest "nginx -g 'daemon off" 7 minutes ago Up 7 minutes 80/tcp my-test.3.di99oj7l9x6firw1ai25sewwc
1afd12cc9140 docker.io/nginx:latest "nginx -g 'daemon off" 7 minutes ago Up 7 minutes 80/tcp my-test.4.aibl3u3pph3fartub0mhwxvzr
cc90da57c25e docker.io/nginx:latest "nginx -g 'daemon off" 27 minutes ago Up 27 minutes 80/tcp my-test.2.aqko8yhmdj53gmzs8gqhoylc2 再次在node2节点上将从node1上转移过来的两个task关闭
[root@node2 ~]# docker stop my-test.3.di99oj7l9x6firw1ai25sewwc my-test.4.aibl3u3pph3fartub0mhwxvzr
my-test.3.di99oj7l9x6firw1ai25sewwc
my-test.4.aibl3u3pph3fartub0mhwxvzr 再次查询服务的状态列表,发现这两个task又转移到node1上了(即在swarm cluster集群中启动的容器,在worker node节点上删除或停用后,该容器会自动转移到其他的worker node节点上)
[root@manager-node ~]# docker service ps my-test
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
2m8qqpoa0dpeua5jbgz1infuy my-test.1 docker.io/nginx manager-node Running Running 38 minutes ago
aqko8yhmdj53gmzs8gqhoylc2 my-test.2 docker.io/nginx node2 Running Running 31 minutes ago
7dhmc63rk0bc8ngt59ix38l44 my-test.3 docker.io/nginx node1 Running Running about a minute ago
di99oj7l9x6firw1ai25sewwc \_ my-test.3 docker.io/nginx node2 Shutdown Complete about a minute ago
erqk394hd4ay7nfwgaz4zp3s0 \_ my-test.3 docker.io/nginx node1 Shutdown Complete 9 minutes ago
607tyjv6foc0ztjjvdo3l3lge my-test.4 docker.io/nginx node1 Running Running about a minute ago
aibl3u3pph3fartub0mhwxvzr \_ my-test.4 docker.io/nginx node2 Shutdown Complete about a minute ago
2dslg6w16wzcgboa2hxw1c6k1 \_ my-test.4 docker.io/nginx node1 Shutdown Complete 9 minutes ago
bmyddndlx6xi18hx4yinpakf3 my-test.5 docker.io/nginx manager-node Running Running 31 minutes ago ----------------------------------------------------------------------------------------------------
同理,swarm还可以缩容,如下,将my-test容器变为1个。
[root@manager-node ~]# docker service scale my-test=1
[root@manager-node ~]# docker service ps my-test
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
2m8qqpoa0dpeuasdfsdfdfsdf my-test.1 nginx manager-node Running Running 3 minutes ago 登录node2节点,使用docker ps查看,会发现容器被stop而非rm ---------------------------------------------------------------------------------------------------
删除容器服务
[root@manager-node ~]# docker service --help //查看帮助
[root@manager-node ~]# docker service rm my-test //这样就会把所有节点上的所有容器(task任务实例)全部删除了
my-nginx ---------------------------------------------------------------------------------------------------
除了上面使用scale进行容器的扩容或缩容之外,还可以使用docker service update 命令。 可对 服务的启动 参数 进行 更新/修改。
[root@manager-node ~]# docker service update --replicas 3 my-test
my-test 更新完毕以后,可以查看到REPLICAS已经变成3/3
[root@manager-node ~]# docker service ls
ID NAME REPLICAS IMAGE COMMAND
d7cygmer0yy5 my-test 3/3 nginx /bin/bash [root@manager-node ~]# docker service ps my-test
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
ddkidkz0jgor751ffst55kvx4 my-test.1 nginx node1 Running Preparing 4 seconds ago
1aucul1b3qwlmu6ocu312nyst \_ my-test.1 nginx manager-node Shutdown Complete 5 seconds ago
4w9xof53f0falej9nqgq064jz \_ my-test.1 nginx manager-node Shutdown Complete 19 seconds ago
0e9szyfbimaow9tffxfeymci2 \_ my-test.1 nginx manager-node Shutdown Complete 30 seconds ago
27aqnlclp0capnp1us1wuiaxm my-test.2 nginx manager-node Running Preparing 1 seconds ago
7dmmmle29uuiz8ey3tq06ebb8 my-test.3 nginx manager-node Running Preparing 1 seconds ago docker service update 命令,也可用于直接 升级 镜像等。
[root@manager-node ~]# docker service update --image nginx:new my-test [root@manager-node ~]# docker service ls
ID NAME REPLICAS IMAGE COMMAND
d7cygmer0yy5 my-test 3/3 nginx:new /bin/bash

  

 

swarm1的更多相关文章

  1. docker swarm集群搭建

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: swarm是docker原生的集群管理软件,与kuberne ...

  2. docker swarm(当前官网示例)

    介绍 Docker Swarm 是 Docker 公司推出的官方容器集群平台,基于 Go 语言实现 作为容器集群管理器,Swarm 最大的优势之一就是 100% 支持标准的 Docker API.各种 ...

  3. 向Kubernetes集群删除Node

    Kubernetes集群中移除Node在master节点上执行: kubectl drain swarm1 --delete-local-data --force --ignore-daemonset ...

  4. docker swarm+register-web+shipyard搭建

    1.swarm安装 swarm安装有很多种服务注册的方式,token.etcd.zookeeper,本文主要以swarm默认的token方式进行安装.因为最新的docker已经集成了swarm,所以从 ...

  5. shell函数(调用、返回值,返回值获取)

    Shell函数返回值,常用的两种方式:return,echo 1) return 语句shell函数的返回值,可以和其他语言的返回值一样,通过return语句返回.示例1: [devadmin@swa ...

随机推荐

  1. sqlplus客户端出现乱码

    查询oracle server端的字符集 select userenv('language') from dual; 修改客户端 cmd是gbk编码 环境变量 NLS_LANG 值:SIMPLIFIE ...

  2. 4-3 线程安全性-原子性-synchronized

    原子性它提供了互斥访问,同一时刻只能有一个线程来对它进行操作.能保证同一时刻只有一个线程来对其进行操作的,除了Atomic包之外,还有锁.JDK提供锁主要分两种,synchronized是一个Java ...

  3. 09-nginx Rewrite语法详解

    和location类似,也是要负责URL解析的. rewrite  重写 nginx的配置非常多,nginx的第三方模块也非常非常多.不可能讲每一种模块的配置办法.通常碰到一个nginx的新问题你想怎 ...

  4. Loadrunner Analyze

    Analysis 对controller运行的结果进行分析 1.首先必须明确:光靠Analysis是不行的,只要能通过Analysis分析出部分问题就已经很不错了, 善于利用它才是最关键的. 2.如何 ...

  5. Zend Studio 10汉化方法

    选择Help菜单->Install New Software...在Work with框中复制此地址:http://download.eclipse.org/technology/babel/u ...

  6. ubuntu 12.04 ubuntu System program problem detected 解决方法

    1. ubuntu System program problem detected本人操作系统是ubuntu12.04,不知道是系统出了问题还是装的软件有问题,每次开机都出现:System progr ...

  7. Ubuntu无法安装rpm包,ubuntu RPM should not be used directly install RPM packages, use Alien instead!

    Ubuntu无法安装rpm包,ubuntu RPM should not be used directly install RPM packages, use Alien instead! 简单来说, ...

  8. Python程序调试-TabError: inconsistent use of tabs and spaces in indentation

    报错信息:TabError: inconsistent use of tabs and spaces in indentation 说明:代码缩进统一使用Tab键或空格键,不能混用. 解决办法: 1. ...

  9. Part4_lesson1---Bootloader设计蓝图

    1.bootloader的作用 2.u-boot是bootloader业界的老大 u-boot分为自主模式和开发模式 3.建立U-boot工程 uboot不能在window下面进行解压,因为在wind ...

  10. (回文串)leetcode各种回文串问题

    题目一:最长连续回文子串. 问题分析:回文串顾名思义表示前后读起来都是一样,这里面又是需要连续的.分析这个问题的结构,可以想到多种方法.暴力解决的方式,2层循环遍历得出各个子串,然后再去判断该子串是否 ...