欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker Compose水平扩展和负载均衡

程序员文章站 2022-03-21 16:29:54
...

一、scale实现水平扩展

docker-comose scale : Set number of containers for a service,实现水平扩展

Docker Compose水平扩展和负载均衡

Docker Compose水平扩展和负载均衡

1.1、用到的三个文件

  • docker-compose.yaml文件
version: "3"

services:

  redis:
    image: redis

  web:
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      REDIS_HOST: redis

   注:水平扩展会抢占8080端口,会报错,所以先不指定端口
   # ports:
   #  - 8080:80 

Docker Compose水平扩展和负载均衡

  • Dockerfile文件
FROM python:2.7
LABEL maintaner="Peng Xiao aaa@qq.com"
COPY . /app
WORKDIR /app
RUN pip install flask redis
EXPOSE 80
CMD [ "python", "app.py" ]
  • app.py文件
from flask import Flask
from redis import Redis
import os
import socket

app = Flask(__name__)
redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)


@app.route('/')
def hello():
    redis.incr('hits')
    return 'Hello Container World! I have been seen %s times and my hostname is %s.\n' % (redis.get('hits'),socket.gethostname())


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=80, debug=True)

1.2、执行docker-compose

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

Docker Compose水平扩展和负载均衡

二、HAProxy实现负载均衡

上图发现 3 个应用都是占用的容器的5000 端口,此时就可以用负载均衡进行请求分发

  Docker Compose水平扩展和负载均衡

2.1、修改docker-compose.yaml文件

version: "3"

services:

  redis:
    image: redis

  web:
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      REDIS_HOST: redis

  lb:
    image: dockercloud/haproxy
    links:
      - web
    ports:
      - 8080:80
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

2.3、使用 curl 请求验证(可以进行负载均衡)

 

Docker Compose水平扩展和负载均衡

Docker Compose水平扩展和负载均衡

2.4 流量高峰过后,为减少资源消耗,也可减小 scale 

  docker-compose up --scale web=2 -d #web 后的数值变小即可