『中级篇』Docker 水平扩展和负载均衡(40)
2018-07-29 本文已影响11人
IT人故事会
Docker Compose 里面的scale 设置服务运行的容器数量。源码地址:https://github.com/limingios/docker中的No.4
服务先创建起来
- 项目路径
ls
cd flask-redis/
pwd
- 项目安装
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
sudo service docker restart
sudo docker-compose up
cd labs/flask-redis/
sudo docker-compose ps
- scale 命令的使用
设置为一个服务启动的容器数量,数量是以这样的参数形式指定的:service=num
docker-compose up --scale web=3 -d
直接报错了。看下源码为什么报错。
- 修改docker-compose.yml文件
ports 去掉。 在试试
version: "3"
services:
redis:
image: redis
web:
build:
context: .
dockerfile: Dockerfile
environment:
REDIS_HOST: redis
- 执行命令
一个--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
但是问题来了没有暴露到外边的端口都是5000内部端口,所以出来了一个命令负载均衡工具:haproxy
- haproxy
HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。 HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的 并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
其实跟上边的例子很相似,只是把python应用的端口改成了80,使用了一个新的image把80映射到本地的8080。
cd lb-scale/
ls
pwd
more app.py
image.png
more Dockerfile
more docker-compose.yml
- docker-compose 安装lb
sudo docker-compose up -d
#访问下看可以不
curl http://127.0.0.1:8080
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,到时候我会演示。
个人技术主页:idig8.com
PS:Docker的scale 可以扩展,也可以所有,他们自动来控制的。web=10 可以改成5 其中的6,7,8,9,10就被删除了。
往期精彩
- docker导学(一)
- 容器的技术概述(二)
- docker的魅力初体验-5分钟安装wordpress不走弯路(三)
- docker官网介绍(四)
- 如何在mac上安装docker(五)
- 如何在window上安装docker(六)
- 如何在mac上通过vagrant安装虚拟机(七)
- 如何在window上通过vagrant安装虚拟机(八)
- docker-Machine的本地使用(九)
- docker-Machine的本地使用(十)
- 在linux/mac下通过Docker-Machine在阿里云上的使用(11)
- docker架构和底层技术(12)
- docker Image概述(13)
- 手动建立一个base Image(14)
- 什么是Container(15)
- 构建自己的Docker镜像(16)
- Dockerfile详解(17)
- 镜像的发布(18)
- Dockerfile实战(19)
- 容器的操作(20)
- Dockerfile实战CMD和ENTRTYPOINT的配合(21)
- 容器的资源限制(22)
- docker网络(23)
- docker学习必会网络基础(24)
- Linux网络命名空间(25)
- Docker Bridge详解(26)
- 容器之间的Link(27)
- 容器的端口映射(28)
- 容器网络之host和none(29)
- 多容器复杂应用的部署(30)
- overlay网络和etcd实现多机的容器通信(31)
- docker的数据持久化存储和数据共享(32)
- windows下vagrant 通过SecureCRT连接centos7(33)
- 数据持久化之Data Volume(34)
- 数据持久化之bind Mounting(35)
- docker 使用bind Mounting实战(36)
- docker容器安装wordpress(37)
- docker Compose到底是什么(38)
- Docker Compose的安装和基本使用(39)