使用docker swarm创建集群并进行效果验证
2017-02-27 17:05
826 查看
上一讲说明了如何安装docker,以及在docker下如何获取及启动容器。下面说说如何使用docker创建集群。docker作为一种全新的容器技术相比传统的虚拟机来说最大的优势就在于轻量化。本来我们使用虚拟机最主要的目的还是想使用虚拟机来启动一些隔离的应用程序。但为了启动这些应用程序不得不创建庞大的虚拟机。所以为什么我们不直接启动被隔离的程序而不需要启动虚拟机哪?这样岂不省去了很多硬盘及内存存储空间。
不仅如此,在当今BS+MS模式风靡全球的情况下,大家需要向别人提供在线服务,而一旦并发访问量增大的时候,我们的服务器往往难以承载。所以仅靠单台服务器来对外提供服务是很难满足应用需求的。这时候就需要多台机器并行提供服务,但无论后台有多少台机器运行对于用户来说都是不可知的,只需要按照统一的地址进行访问。这就是集群。集群技术被应用到互联网或政务云环境已经有很多年了。以往虚拟机的模式基本是通过“负载均衡器+逻辑主机”的模式运行的,也就是外部多个请求来了之后由负载均衡器进行分发,将请求分发给某个逻辑主机进行处理,并将处理结果返回给客户端。负载均衡器有硬件和软件两种。硬件的种类有很多,而且价格往往都不菲。软件负载均衡器有apache、nginx等好几种,大都免费,基本可以满足日常需求。但无论哪种方式,动态扩容都不是很容易,不是得停机就是得写复杂的模块挂载到apache或nginx上。
当docker容器出现后一切都变得那么简单,不仅配置变得简单,动态扩容或收缩都变得很容易。
如果想使用docker创建容器集群,较低版本的docker是不太好弄的,操作较为复杂,建议将docker升级到最新版(1.13版以上)。这里以1.13.1为例向大家介绍如何使用swarm搭建docker集群。
第一步:首先在宿主机的终端中执行如下命令:
此时生成的token 6cce80f59f4292ba8f4e085950c6f480一定得保存好,后面要用它来创建集群环境。
接下来,我们使用如下命令在宿主机上启动多个容器:
如上图所示,我们运行了两次命令,因此便创建了两个容器实例。命令中加上参数“-d”是为了让容器以守护模式运行,这样不至于在终端输入“exit”断开容器后容器自动关闭掉。
接下来查看一下每个容器的IP地址,在宿主机中输入如下命令以便查看所有运行的容器实例:
从上图中可以看到有两个tomcat的容器实例在运行,接下来运行如下命令进入第一个容器:
可以看到,容器的IP地址为172.17.0.3,类似的,可以看到另一个容器的IP地址为172.17.0.2(说明:如果没有做额外的配置,同时启动容器时又没有指定IP地址,那么容器的IP地址一般从172.17.0.1或172.17.0.2开始的,如果宿主机的IP地址为127.17.0.1,则容器的IP地址就从172.17.0.2开始分配,否则就从172.17.0.1开始分配)。
第二步:在宿主机中运行如下命令将两个容器加入到集群中(如果像上图一样还在容器中,则在终端中输入exit命令即可返回宿主机):
出现上图中的提示信息就表示添加成功了,但是必须按下Ctrl+C组合键才可退出。类似地,我们可以将另外一个IP地址172.17.0.3也添加到swarm集群中。
第三步:在宿主机的终端中运行如下命令启动swarm manager:
像上图一样执行完命令后出现了一个新的ID就表示启动成功了,到此swarm集群搭建完毕。可以运行如下命令查看集群中包含的节点:
可以看到,目前集群中有两个节点:172.17.0.3和172.17.0.2。下面我们来验证一下集群的效果。我们分别进入每个容器启动一下tomcat:
这时用宿主机的对外IP地址访问tomcat:
可以看到,已经可以通过集群访问tomcat了。
为了验证集群的效果,我们可以再次进入容器将其中的tomcat顺次关闭。首先进入172.17.0.2中关闭tomcat:
而再进入172.17.0.3中关闭tomcat:
此时再在浏览器里刷新页面,会出现如下问题:
此时已经无法通过集群访问页面了!然后再进入172.17.0.3启动tomcat:
再刷新页面:
OK,swarm集群搞定!
回过头来我们再来分析一下。网上很多教程里对于swarm join命令里的IP地址说的不是很清楚,到底是哪个机器的IP?宿主机的还是容器的?经笔者测试后发现,swarm join只能写由本机启动的容器的IP地址,否则虽然能够添加成功,但集群机制却不起作用。
希望对大家学习docker集群有所帮助!
不仅如此,在当今BS+MS模式风靡全球的情况下,大家需要向别人提供在线服务,而一旦并发访问量增大的时候,我们的服务器往往难以承载。所以仅靠单台服务器来对外提供服务是很难满足应用需求的。这时候就需要多台机器并行提供服务,但无论后台有多少台机器运行对于用户来说都是不可知的,只需要按照统一的地址进行访问。这就是集群。集群技术被应用到互联网或政务云环境已经有很多年了。以往虚拟机的模式基本是通过“负载均衡器+逻辑主机”的模式运行的,也就是外部多个请求来了之后由负载均衡器进行分发,将请求分发给某个逻辑主机进行处理,并将处理结果返回给客户端。负载均衡器有硬件和软件两种。硬件的种类有很多,而且价格往往都不菲。软件负载均衡器有apache、nginx等好几种,大都免费,基本可以满足日常需求。但无论哪种方式,动态扩容都不是很容易,不是得停机就是得写复杂的模块挂载到apache或nginx上。
当docker容器出现后一切都变得那么简单,不仅配置变得简单,动态扩容或收缩都变得很容易。
如果想使用docker创建容器集群,较低版本的docker是不太好弄的,操作较为复杂,建议将docker升级到最新版(1.13版以上)。这里以1.13.1为例向大家介绍如何使用swarm搭建docker集群。
第一步:首先在宿主机的终端中执行如下命令:
$ sudo docker run --rm swarm create
此时生成的token 6cce80f59f4292ba8f4e085950c6f480一定得保存好,后面要用它来创建集群环境。
接下来,我们使用如下命令在宿主机上启动多个容器:
$docker run -i -t -d tomcat:latest /bin/bash
如上图所示,我们运行了两次命令,因此便创建了两个容器实例。命令中加上参数“-d”是为了让容器以守护模式运行,这样不至于在终端输入“exit”断开容器后容器自动关闭掉。
接下来查看一下每个容器的IP地址,在宿主机中输入如下命令以便查看所有运行的容器实例:
$sudo docker ps
从上图中可以看到有两个tomcat的容器实例在运行,接下来运行如下命令进入第一个容器:
$docker exec -it e7bc718f8429 /bin/bash这时就进入到了ID为e7bc718f8429的容器内,再在容器内运行ip addr命令即可查看容器的IP地址:
可以看到,容器的IP地址为172.17.0.3,类似的,可以看到另一个容器的IP地址为172.17.0.2(说明:如果没有做额外的配置,同时启动容器时又没有指定IP地址,那么容器的IP地址一般从172.17.0.1或172.17.0.2开始的,如果宿主机的IP地址为127.17.0.1,则容器的IP地址就从172.17.0.2开始分配,否则就从172.17.0.1开始分配)。
第二步:在宿主机中运行如下命令将两个容器加入到集群中(如果像上图一样还在容器中,则在终端中输入exit命令即可返回宿主机):
$sudo docker run –-rm swarm join –addr=172.17.0.2:2375
出现上图中的提示信息就表示添加成功了,但是必须按下Ctrl+C组合键才可退出。类似地,我们可以将另外一个IP地址172.17.0.3也添加到swarm集群中。
第三步:在宿主机的终端中运行如下命令启动swarm manager:
$sudo docker run –d –p 2376:2375 swarm manage token://6cce80f59f4292ba8f4e085950c6f480
像上图一样执行完命令后出现了一个新的ID就表示启动成功了,到此swarm集群搭建完毕。可以运行如下命令查看集群中包含的节点:
$docker run –-rm swarm list token://6cce80f59f4292ba8f4e085950c6f480
可以看到,目前集群中有两个节点:172.17.0.3和172.17.0.2。下面我们来验证一下集群的效果。我们分别进入每个容器启动一下tomcat:
这时用宿主机的对外IP地址访问tomcat:
可以看到,已经可以通过集群访问tomcat了。
为了验证集群的效果,我们可以再次进入容器将其中的tomcat顺次关闭。首先进入172.17.0.2中关闭tomcat:
root@647d583c2f14:/usr/local/tomcat/bin#sh shutdown.sh此时再在浏览器中刷新页面,会发现依然可以访问tomcat首页:
而再进入172.17.0.3中关闭tomcat:
root@e7bc718f8429:/usr/local/tomcat/bin#sh shutdown.sh
此时再在浏览器里刷新页面,会出现如下问题:
此时已经无法通过集群访问页面了!然后再进入172.17.0.3启动tomcat:
再刷新页面:
OK,swarm集群搞定!
回过头来我们再来分析一下。网上很多教程里对于swarm join命令里的IP地址说的不是很清楚,到底是哪个机器的IP?宿主机的还是容器的?经笔者测试后发现,swarm join只能写由本机启动的容器的IP地址,否则虽然能够添加成功,但集群机制却不起作用。
希望对大家学习docker集群有所帮助!
相关文章推荐
- 使用 Docker Toolbox 自动创建 Swarm 集群+Portainer 图形化管理的脚本
- 使用Docker Toolbox 创建Swarm集群的问题-概念混淆导致
- 使用时速云的docker swarm镜像创建docker集群(与时速云社区关中刀客为同一用户)
- Swarm创建docker集群:服务发现-etcd
- docker学习笔记3—使用Dockerfile与docker build命令创建一个nginx服务器镜像,并使用浏览器进行访问
- docker swarm 集群创建
- 创建docker swarm集群的两种方式
- Docker创建Docker Swarm集群节点
- Docker - 运行 containers 使用在 swarm 模式下创建的 overlay 模式的 network
- 在Ubuntu 16.04上用Docker Swarm和DigitalOcean创建一个Docker容器集群的方法
- 使用Docker swarm构建wordpress集群 推荐
- 基于Docker Swarm+Shipyard实现企业级Docker私有云平台——Docker Swarm集群创建与可视化管理
- Docker Swarm 集群的创建与管理几篇好文章
- 一步步创建第一个Docker App —— 3. 创建一个集群Swarm
- 详解使用docker 1.12 搭建多主机docker swarm集群
- 使用keytool创建证书,并获取证书内容对数据进行验证。
- 如何对动态创建控件进行验证以及在Ajax环境中的使用
- 如何对动态创建控件进行验证以及在Ajax环境中的使用
- 使用Docker Swarm创建Overlay Network
- 使用Docker镜像搭建consul和swarm集群基础环境及overlay网络