docker-compose 水平扩展和负载均衡

作者: 鲁智深 分类: 说说 发布时间: 2018-12-29 01:14

水平扩展

利用 scale 命令实现水平扩展,接着上面的 flask 案例,先将ports端口删除,因为我们在本地一台机器上实现水平扩展,本地端口只有一个8080。

1
docker-compose up --scale web-3 -d
1
2
3
4
5
6
7
8
9
10
11
12
version: "3"

services:
    redis:
        images:redis
   
    web:
        build:
            context: .
            dockerfile: Dockerfile
        environment:
            REDIS_HOST:redis
负载均衡

负载均衡

如果想扩展成10个,那直接 web-10

1
docker-compose up --scale web-10 -d

负载均衡

在 yml 文件中添加 HAProxy 服务 services

HAProxy是免费、极速且可靠的用于为TCP和基于HTTP应用程序提供高可用、负载均衡和代理服务的解决方案。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: "3"

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

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

修改app.py的监听端口为80

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)

最后dockerfile对外暴露的端口也设置成80

1
2
3
4
5
6
7
FROM  python:2.7
LABEL maintaner="AYF@qq.com"
COPY ./app
WORKDIR /app
RUN pip install flask redis
EXPOSE 5000
CMD ["python","app.py"]

我们来启动容器

1
2
3
docker-compose up -d
docker-compose ps
docker-compose up --scale web-10 -d

运行测试shell命令

1
curl 127.0.0.1:8080
负载均衡

负载均衡

最后说一点 docker-compose 是用于本地开发的测试的工具,不适合线上环境部署。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注