一.Docker Compose
Docker Compose 将所管理的容器分为三层,工程(project),服务(service)以及容器(contaienr)。Docker Compose 运行的目录下的所有文件(docker-compose.yml, extends 文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker Compose 并没有解决负载均衡的问题,因此需要借助其他工具实现服务发现及负载均衡。
Docker Compose 是一个用来创建和运行多容器应用的工具。使用 Compose 首先需要编写
Compose 文件来描述多个容器服务以及之间的关联,然后通过命令根据配置启动所有的容器。
Dockerfile 可以定义一个容器,而一个 Compose 的模板文件(YAML 格式)可以定义一个包含多个相互关联容器的应用。Compose 项目使用 python 编写,基于后面的实验中我们将学习的 Docker API 实现。
二.Docker Compose配置测试
配置环境redhat7.2
1.将docker-compose-linux-x86_64的文件放置到/bin下,并做软链接和加可执行权限,方便调用命令
![Screenshot from 2017-10-31 10-25-39.png 7413fd4903f62436355cee16a41a4e63.png]()
2.测试导入haproxy和nginx镜像,做负载均衡
3.在tmp下编写compose配置文件
![Screenshot from 2017-10-31 11-09-31.png 32e65442323707e0c9f00bef6122f7b7.png]()
![Screenshot from 2017-10-31 11-08-12.png cc4a397e98430b1f57ae03f62809a33b.png]()
![Screenshot from 2017-10-31 11-28-53.png 059fc8c52c8a1046547ad10ce6430434.png]()
4.创建后端服务
web1为httpd,web2和web3为nginx,分别创建默认访问目录
![Screenshot from 2017-10-31 11-16-20.png 98a2ca899ca49b5efaad8ef0a0875578.png]()
![Screenshot from 2017-10-31 11-13-49.png 299d23c757e83714f9eb2f141d0d131b.png]()
![Screenshot from 2017-10-31 11-15-04.png 6b1170ca6716efe6b5322863078e120d.png]()
![Screenshot from 2017-10-31 11-15-41.png c784882c864dbc52799e36fb4b3766f0.png]()
5.在web1 httpd服务里建立配置安装httpd服务和启动httpd服务文件
![Screenshot from 2017-10-31 11-20-57.png 4fe49694d16a6ae9dc60fa50b609df64.png]()
![Screenshot from 2017-10-31 11-20-19.png 43b20273a6987408a1157ab10e6509ae.png]()
6.在haproxy里建立haroxy.cfg负载均衡配置文件
![Screenshot from 2017-10-31 11-24-16.png a8a30407851c3ae7d1ecdba58fa9a524.png]()
![Screenshot from 2017-10-31 11-24-02.png 7e1a5c262c363d6bc6ca384ef7609961.png]()
7.在该compose目录下执行 docker-compose up 命令,会整合输出所有容器的输出
docker-compose完成结构
![Screenshot from 2017-10-31 11-34-05.png 3da850dd5a5fa0fcdd3d4ffd9b67db87.png]()
![Screenshot from 2017-10-31 11-24-44.png 7a079bb56dfc85202bcbf0587d1c65e7.png]()
![Screenshot from 2017-10-31 11-31-56.png 519923e50c287ab6e24527474d0407f8.png]()
8.配置完成,实现负载均衡
![Screenshot from 2017-10-31 11-30-16.png 84f7b31a79bf62a53ac56db049154e26.png]()
![Screenshot from 2017-10-31 11-30-19.png 666d346464460ecc20c5bf98bbe510e2.png]()
![Screenshot from 2017-10-31 11-30-22.png c057acc4c881958d6126514554d632fb.png]()
![Screenshot from 2017-10-31 11-30-25.png 0474285fe1d60e8f1e83b1e02efdcc78.png]()
![Screenshot from 2017-10-31 11-30-49.png 8160f3b30c3e96320369ad7e338aea29.png]()
9.健康检查,关闭web3,访问正常,重新启动web3,服务正常
![Screenshot from 2017-10-31 11-32-24.png 167d4308f6ce1545e1f8dd95e5b8affc.png]()
![Screenshot from 2017-10-31 11-32-34.png a8f440b8a093c8b4e16d66cb0f7e23f7.png]()
![Screenshot from 2017-10-31 11-33-01.png 9aa22a18cbd98fb5e21e6f8700eac50e.png]()
![Screenshot from 2017-10-31 11-33-10.png 47b8e147f8d730078d8434df084a542e.png]()
三.Docker swarm的负载均衡高可用
Swarm 是 Docker 公司在 2014 年 12 月初发布的一套较为简单的工具,用来管理 Docker 集
群,它将一群 Docker 宿主机变成一个单一的,虚拟的主机。Swarm 使用标准的 Docker API
接口作为其前端访问入口,换言之,各种形式的 Docker Client(docker client in go, docker_py,docker 等)均可以直接与 Swarm 通信。Swarm 几乎全部用 Go 语言来完成开发。Swarm deamon 只是一个调度器(Scheduler)加路由器(router),Swarm 自己不运行容器,它只是接受 docker 客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使Swarm 由于某些原因挂掉了,集群中的节点也会照常运行,当 Swarm 重新恢复运行之后,它会收集重建集群信息。
1.配置环境
redhat7.2,7.2自带swarm工具
server1 主
server2 从
server3 从
2.安装
server1,server2,server3安装docker并启动服务
![Screenshot from 2017-10-31 11-57-34.png f7bbcc9ca98832770f106329c3a99c6a.png]()
3.创建集群
![Screenshot from 2017-10-31 13-56-14.png 60c0c991367ec42c827d791e803d1725.png]()
将docker swarm join 到172.25.29.1:2377 进行复制,分别复制到server2和server3的shell里
![Screenshot from 2017-10-31 14-25-06.png 1d0d057174f80fd24987c465ab45b653.png]()
![Screenshot from 2017-10-31 14-25-23.png 7c555a99b8ed8ee109f93eb37bd316d0.png]()
完成后在server1上查看节点状态,集群配置完成
![Screenshot from 2017-10-31 14-25-29.png 50cfdb119be088c5bd3aeec20726a570.png]()
4.Docker swarm 负载均衡高可用实验
server1,server2,server3导入nginx镜像
![Screenshot from 2017-10-31 14-28-20.png 918be8c43882df25eb86228b6beabd53.png]()
![Screenshot from 2017-10-31 14-28-24.png 7524f8cc64ec3dd703b3a2c55f5f3883.png]()
![Screenshot from 2017-10-31 14-28-29.png 8b0fee32afbbd765f3c1cf6fc9c55987.png]()
5.导入flask框架镜像,server1,server2,server3都要导
![Screenshot from 2017-10-31 15-24-51.png 40dafd535025fd62e60325c6a3ab395d.png]()
由于实现负载均衡,需要在nginx的网页上显示主机名,以区分不同后端的负载均衡
用python写的一个显示主机名的语句,导入flask和os
![Screenshot from 2017-10-31 15-21-04.png 2a03c57860748dcdbfd47fbd3b3063d4.png]()
6.server1单机运行读取python文件,看是否能查看到主机名
打开flask镜像,将demo.py脚本放到root下
![Screenshot from 2017-10-31 15-25-02.png 02e2472be81236b99965023dfe1c93a4.png]()
提交保存
![Screenshot from 2017-10-31 15-26-53.png 2baa516ef8f9df8b4485fc8ae15d6884.png]()
测试写的显示主机名的python脚本是否正常
![Screenshot from 2017-10-31 15-29-59.png a7bd98a128e5cc6444cf09c45d2c7fad.png]()
可以显示容器名,测试正常,可以封装提交
![Screenshot from 2017-10-31 15-30-06.png 3e161054b9b0497fe09bcc377a9eec7e.png]()
7.将测试好的加入demo.py脚本的镜像python:demo镜像导出为demo.tar
关闭容器并导出
![Screenshot from 2017-10-31 15-41-21.png e589b625d017becc409d31d5d79f38b8.png]()
8.server2和server3分别导入flask和demo镜像
![Screenshot from 2017-10-31 15-41-04.png 418e92b07abcdd0bbdc8713b5b1e6941.png]()
![Screenshot from 2017-10-31 15-41-11.png eb3f9a890e00de4bb634e31de41cd370.png]()
9.创建名为flask集群,并启动3个后端服务节点,读取python下的demo.py脚本
![Screenshot from 2017-10-31 16-40-43.png a3ffeb895fee1aac64311d71d7f86dd0.png]()
10.启动后浏览器测试
![Screenshot from 2017-10-31 16-41-12.png 90effcdde72e061baf6fc4358017b423.png]()
![Screenshot from 2017-10-31 16-41-18.png ecf58364d6196e36f048f34bfd94b911.png]()
3台后端服务轮询
![Screenshot from 2017-10-31 16-41-26.png f3040cda7f64e9892d28ec6b583cb712.png]()
11.将后端服务变为8个节点
![Screenshot from 2017-10-31 16-42-35.png 7867c9e10ee0e7f6ab7d535dc75090aa.png]()
显示轮询
![Screenshot from 2017-10-31 16-42-52.png 6f8ab379cf2425816042481f8f1ad0a2.png]()
四.Docker swarm可视化web监控界面
1.导入visualizer镜像
![Screenshot from 2017-10-31 16-47-37.png 6680fafde6b696fdf700028060ab094f.png]()
2.创建
![Screenshot from 2017-10-31 16-50-27.png ad9bff7c8dd26e88df65bfea53cec5a0.png]()
查看容器
![Screenshot from 2017-10-31 16-50-41.png 7fbdbb259cc9ce41dae7626340bd944e.png]()
3.浏览器输入地址,查看监控界面
![Screenshot from 2017-10-31 16-57-58.png d902d1aa1560cc884f4656000d7b1fcf.png]()
4.定时更新
![Screenshot from 2017-10-31 17-21-36.png bbfa179374f849d754245deae56d9018.png]()
update-parallelism 2 每次更新2个
update-delay 10s 每十秒更新1次
nginx 每次更新nginx镜像
更新 名为flask的集群
图形变化image:nginx
![Screenshot from 2017-10-31 17-21-05.png a245cbaa2fc19e269957f8f0cee38391.png]()
本文转自一百个小排 51CTO博客,原文链接:http://blog.51cto.com/anfishr/1977919,如需转载请自行联系原作者