Docker Swarm——集群管理
前言
之前在总结docker machine的时候,当时对docker理解还不够深入,甚至还不知道 docker machine 与 docker swarm 的区别。
在查阅资料以及官方文档之后,今天基本彻底搞明白了。其实 docker machine 只是一个docker多节点的管理工具,它的作用是帮助我们在其他节点上安装docker、运行docker容器等;而 docker swarm 则是一个docker集群管理工具,有了它整个集群就能协同工作,从容器的角度来说有点像是openstack的感觉,能够直接管理整个集群,从分布式的角度来说有点像是hadoop,当然只是从分布式的这个角度来考虑。
本文为大家简单介绍 docker swarm 下的跨主机通信以及最强大的 docker swarm 集群管理功能。
一、docker swarm 安装
1.1 docker machine 创建节点
此处也能体现 docker machine 与 docker swarm 的区别,简单来说docker machine是为 docker swarm 服务的。
先使用 docker-machine 创建三个docker节点。
docker-machine create -d generic --generic-ip-address <ip> <name>
在docker-machine主节点执行三次上述操作,其中ip为要创建的主机的ip地址,name为给想要创建的主机重命名的host名称。此处假设分别为swarm-manager、swarm-node1、swarm-node2,很明显我们选择swarm-manager为manager节点(下文详细讲解)。
1.2 创建 swarm 集群
docker swarm 分为manager节点和worker节点,显然manager节点相当于主节点,能够管理所有worker节点。
创建 manager 节点
在上述创建好的三个docker节点中选择一个作为manager节点(上文已经选择了swarm-manager节点),在docker-machine节点上执行下述操作:
docker-machine ssh swarm-manager "docker swarm init"
执行上述操作,会提示你创建成功,并给出一个创建worker节点的命令,其中会包含token等信息,token是manager节点识别子节点的标识。
创建worker节点
同样,在docker-machine中执行下述操作:
docker-machine ssh swarm-node1 "docker swarm join --token <token> <ip>:2377"
docker-machine ssh swarm-node2 "docker swarm join --token <token> <ip>:2377"
其中为上述token、ip为manager节点ip地址,这些都会在创建成功manager节点后给出。
都执行完就可以在manager节点中执行下述命令查看所有集群中所有节点:
docker node ls
此命令会列出集群中所有节点,并给出各个节点的角色。当然此处你也可以通过docker-machine以ssh的方式执行,下同。
二、docker swarm 跨主机通信
swarm 跨主机通信同样需要overlay网络(或者其他几个选项,还未测试)。但是与之前讲述不同的是swarm不需要consul服务,其实是swarm提供了consul的功能,相当于简化了跨主机通信的操作。
在manager节点执行下述命令创建overlay网络:
docker network create -d overlay --attachable my_net
此处必须要添加--attachable参数,否则不能用于容器。
在主节点上创建overlay网络之后,worker节点并不像采用consul的方案那样能够自动识别到该网络,但是可以通过--network my_net
的方式在创建容器的时候使用该网络,当在worker节点按上述方式运行容器并使用该网络之后,即可通过docker network ls在此worker节点上查看到该网络。
这样所有使用该网络的节点均可进行通信。同样通过brctl show 命令可以看到节点生成了一个docker_gwbridge网桥,并且下面挂载了相应的vethxxx,这与之前分析的相同,是overlay网络的工作原理。
三、docker swarm 集群管理——部署应用
这是docker swarm强大之处,通过它能够直接实现负载均衡、主备、容灾等功能。它可以自动创建一个应用,应用包含一系列的服务,每一个服务简单的说是一个镜像创建几个容器,这些容器集合起来能够实现某些特定的功能,并且无需用户指定这些容器运行在哪些节点上,swarm会自动分配,甚至会在不同的节点上跳转,当某worker节点挂掉的时候其上运行的所有容器也会自动迁移到其他节点上。
说了这么多好处,下面详细介绍一下如何发布一个服务。
3.1 创建配置文件
首先创建一个配置文件,其内包含了该应用的所有信息,包含需要的服务,每一个服务使用的镜像、创建的容器个数、端口映射、存储映射、网络等等,基本上是前面所介绍的容器信息的集合。
其配置文件采用YAML格式,YAML是专门用来写配置文件的语言,非常简洁。YAML基本规则如下:
- 大小写敏感。
- 使用缩进表示层级关系。
- 进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可。
- # 表示注释,从这个字符一直到行尾,都会被解析器忽略。
YAML详细规则可以参考http://www.ruanyifeng.com/blog/2016/07/yaml.html?f=tt
swarm应用基本模板如下:
version: "3"
services:
web:
# replace username/repo:tag with your name and image details
image: username/repo:tag
deploy:
replicas: 5
restart_policy:
condition: on-failure
resources:
limits:
cpus: "0.1"
memory: 50M
ports:
- "80:80"
networks:
- webnet
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
networks:
webnet:
ipam:
config:
- subnet: 172.19.0.0/24
其中version: "3"表示使用第三版,每个版本配置规则不同,services项下面有web和visualizer两项(此处名称可以任取,只要自己清楚就行),表示应用有两个服务,每个服务下面是使用的镜像以及端口映射、存储映射、网络等信息。重点看一下deploy项,replicas表示运行容器运行的个数,restart_policy表示重启策略,resources下是容器的运行资源,limits是运行限制,包含cpu、内存等限制,cpus值为"0.1"表示所有cpu的百分之十,constraints: [node.role == manager]表示该容器只部署在manager节点上。每个service下面的networks可以有多个,但是必须都包含在顶级的networks中,顶级networks中也可以包含多个网络,每一个可以不进行任何设置,可以采用上述方式进行设置,最终swarm会创建一个appname_webnet的网络,此处webnet的名字也可以任取,appname是将要创建的服务的名称,在下面会介绍。
将上述配置文件保存到docker-compose.yml文件中,待用。
3.2 部署应用
通过运行以下命令部署应用:
docker stack deploy -c docker-compose.yml <appname>
其中appname为应用的名称。这样我们就成功部署了一个应用,里面包含三个服务。
访问swarm集群下的任何一个ip地址的上述端口,swarm都会将其随机转发到stack下的任何一个container,这样就可以起到负载均衡、容灾、主备等功能。
3.3 docker stack 常用命令
docker stack ls
查看部署的所有应用,可以查看到应用名称及包含的服务个数。
docker stack deploy
docker stack deploy -c <composefile> <appname>
上面介绍过的部署应用。
docker stack services
docker stack services <appname>
查看某个应用中的服务具体信息。
docker stack ps
docker stack ps <appname>
查看某个应用的具体信息,包含每个容器的配置以及运行在哪个节点等。
docker stack rm
docker stack rm <appname>
删除某个应用。
四、总结
本文简单介绍了docker swarm以及其安装、部署应用及docker stack相关操作。可以看出swarm功能很强大,基本等同于一个小的openstack,后续会继续深入学习。
Docker Swarm——集群管理的更多相关文章
- Docker Swarm 集群管理利器核心概念扫盲
Swarm 简介 Docker Swarm 是 Docker 官方推出的容器集群管理工具,基于 Go 语言实现.代码开源在:https://github.com/docker/swarm 使用它可以将 ...
- Docker Swarm 集群环境搭建及弹性服务部署
上一篇文章<Docker Swarm 集群管理利器核心概念扫盲>中我们把 Swarm 重要的概念性知识给大家讲解了一波,理论完事就该实战了,这篇文章带大家从零开始,搭建 Docker Sw ...
- Docker容器集群管理之Swarm
Docker容器集群管理主流方案 Swarm Docker公司自研发的集群管理系统. Kubernetes Google开源的一个容器集群管理系统,用于自动化部署.扩展和管理容器应用.也称为K8S ...
- 非节点主机通过内网远程管理docker swarm集群
这是今天使用 docker swarm 遇到的一个问题,终于在睡觉前解决了,在这篇随笔中记录一下. 在 docker swarm 集群的 manager 节点上用 docker cli 命令可以正常管 ...
- 通过docker-machine和etcd部署docker swarm集群
本片文章介绍一下 使用docker-machine 搭建docker swarm 集群:docker swarm是docker 官方搭建的容器集群编排工具:容器编排,就是可以使你像使用一太机器一样来使 ...
- Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例
目录 [TOC] 1.环境准备 本文中的案例会有四台机器,他们的Host和IP地址如下 c1 -> 10.0.0.31 c2 -> 10.0.0.32 c3 -> 10.0.0. ...
- 从零开始搭建Docker Swarm集群
从零开始搭建Docker Swarm集群 检查节点Docker配置 1. 打开Docker配置文件(示例是centos 7)vim /etc/sysconfig/docker2. 添加-H tcp:/ ...
- docker + swarm 集群
docker + swarm 集群 导读 Swarm是Docker公司在2014年12月初新发布的容器管理工具.和Swarm一起发布的Docker管理工具还有Machine以及Compose.Swar ...
- Docker Swarm集群
Docker Swarm集群 IP 10.6.17.11 管理节点 IP 10.6.17.12 节点A IP 10.6.17.13 节点B IP 10.6.17.14 节点C 安装 Sw ...
随机推荐
- win上的某个端口是否开启
1.添加Telnet服务 控制面板-->程序-->打开或关闭windows功能 2.配置Telnet为自动并开启服务 计算机-->服务和应用程序-->服务 3.telnet - ...
- JavaBridge
有的时候我们需要在PHP里调用JAVA平台封装好的jar包里的class类和方法 一般的做法是采用php-java-bridge做桥接 1.实现原理: 先打开java的一个监听端口,php调用java ...
- 更改mysql的加密方式和密码策略
-- 修改密码为用不过期 mysql> ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; Query O ...
- 【scala】 scala 基础(一)
至于什么是scala,摘录一段 维基百科的解释: scala 下载 安装 省略 1.环境变量配置完成后 命令行报错,因为scala 的安装路径里边包含空格 修改后即可.由于我的本地包含空格,此处CLI ...
- 一个基于jquery的智能提示控件intellSeach.js
一.需求 我们经常会遇到[站内搜索]的需求,为了提高用户体验,我们希望能做到像百度那样的即时智能提示.例如:某公司人事管理系统,想搜索李XX,只要输入“李”,系统自然会提示一些姓李的员工,这样方便用户 ...
- 【Android】java.lang.RuntimeException: java.lang.Throwable: A WebView method was called on thread 'JavaBridge'.
一.问题 Java调用JS事件出现 java.lang.RuntimeException: java.lang.Throwable: A WebView method was called on th ...
- 【Android】录音-amr音频录制
http://www.cnblogs.com/fengzhblog/archive/2013/08/01/3231500.html http://blog.csdn.net/fan7983377/ar ...
- linux 开机自启转载
设置开机启动示例: # touch /etc/init.d/rc.local 设置为可执行: # chmod +x /etc/init.d/rc.local 用 update-rc.d 设置启动级别: ...
- RN(八)——react-native-image-viewer & react-native-swiper
以项目(业务GO)为例: react-native-swiper 轮播(用在首页的图集轮播) https://github.com/leecade/react-native-swiper react- ...
- 《Lua程序设计》第5章 函数 学习笔记
Lua为面向对象式的调用也提供了一种特殊的语法——冒号操作符.表达式o.foo(o, x)的另一种写法是o:foo(x),冒号操作符是调用o.foo时将o隐含地作为函数的第一个参数.Lua可以调用C语 ...