『中级篇』Docker 水平扩展和负载均衡(40)
2018-09-24 15:44:48
李明
  • 访问次数: 379
  • 注册日期: 2018-07-09
  • 最后登录: 2020-03-30

原创文章,欢迎转载。转载请注明:转载自 IT人故事会,谢谢!
原文链接地址: 『中级篇』Docker 水平扩展和负载均衡(40)

Docker Compose 里面的scale 设置服务运行的容器数量。源码地址: https://github.com/limingios/docker中的No.4

服务先创建起来
  • 项目路径

ls cd flask-redis/ pwd

1660a888147558ad?w=1057&h=291&f=png&s=12

  • 项目安装

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

1660a8880f3dc683?w=1240&h=197&f=png&s=33

sudo service docker restart sudo docker-compose up

1660a88814274d50?w=1240&h=376&f=png&s=54

cd labs/flask-redis/ sudo docker-compose ps

1660a8881afab55c?w=1240&h=321&f=png&s=49

  • scale 命令的使用

设置为一个服务启动的容器数量,数量是以这样的参数形式指定的:service=num

docker-compose up --scale web=3 -d

1660a88810107f72?w=1240&h=241&f=png&s=53

直接报错了。看下源码为什么报错。

1660a8881064a4a0?w=1240&h=390&f=png&s=36

  • 修改docker-compose.yml文件

ports 去掉。 在试试

version: "3" services:   redis:     image: redis   web:     build:       context: .       dockerfile: Dockerfile     environment:       REDIS_HOST: redis

1660a8886d90c0a0?w=1187&h=368&f=png&s=77

  • 执行命令

一个--scale 容器名=数字,就可以随时让web进行扩展。感觉很方便把!

#-d后台运行 sudo docker-compose up -d #启动了2个容器,1个web,1个resdis sudo docker-compose ps #水平扩展给web的容器增加到3个 sudo docker-compose up --scale web=3 -d #启动了4个容器,3个web,1个resdis sudo docker-compose ps

1660a88873d494db?w=1240&h=470&f=png&s=76

但是问题来了没有暴露到外边的端口都是5000内部端口,所以出来了一个命令负载均衡工具:haproxy

  • haproxy

HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。 HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的 并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
其实跟上边的例子很相似,只是把python应用的端口改成了80,使用了一个新的image把80映射到本地的8080。

cd lb-scale/ ls pwd

1660a888740e8874?w=875&h=166&f=png&s=765

more app.py

image.png
image.png

more Dockerfile

1660a88877a5f30a?w=1146&h=214&f=png&s=95

more docker-compose.yml

1660a8890010e460?w=1240&h=536&f=png&s=33

  • docker-compose 安装lb

sudo docker-compose up -d #访问下看可以不 
curl  
sudo docker-compose up --scale web=10 -d curl http://127.0.0.1:8080

https://hub.docker.com/r/dockercloud/haproxy/
dockercloud / haproxy 这个是测试学习用的,老铁们只要知道这个东西就可以了,实际项目中,主要用的nginx,到时候我会演示。

1660a88916fda8c6?w=1240&h=383&f=png&s=67
1660a889283b1536?w=1240&h=615&f=png&s=10
1660a889518afe86?w=1240&h=377&f=png&s=11
1660a8895b12b09b?w=1240&h=381&f=png&s=58
1660a88968ea7024?w=1240&h=812&f=png&s=21

个人技术主页:idig8.com

PS:Docker的scale 可以扩展,也可以所有,他们自动来控制的。web=10 可以改成5 其中的6,7,8,9,10就被删除了。 image