6.4水平拡張と負荷分散
2205 ワード
構成の変更
flask-redisのcompose
portsを削除して、次のように変更します.
Webコンテナの数を動的に拡張できます
削除しないとエラーが発生し、1つの仮想マシンのポートに複数のコンテナのポートをマッピングすることはできません.
水平方向の拡張
ふかへいこう
docker-compose.yml
Dockerfile
app.py
次のコマンドを使用してテストします.
flask-redisのcompose
version: "3"
services:
redis:
image: redis
web:
build:
context: .
dockerfile: Dockerfile
ports:
- 5000:5000
environment:
REDIS_HOST: redis
portsを削除して、次のように変更します.
version: "3"
services:
redis:
image: redis
web:
build:
context: .
dockerfile: Dockerfile
environment:
REDIS_HOST: redis
Webコンテナの数を動的に拡張できます
削除しないとエラーが発生し、1つの仮想マシンのポートに複数のコンテナのポートをマッピングすることはできません.
水平方向の拡張
# 1 web
docker-compose up -d
# 9 , 10
docker-compose up --scale web=10 -d
# 5 , 5
docker-compose up --scale web=5 -d
ふかへいこう
docker-compose.yml
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
Dockerfile
FROM hub.c.163.com/library/python
LABEL maintainer="[email protected]"
COPY . /app
WORKDIR /app
RUN pip install flask redis
EXPOSE 80
CMD ["python","app.py"]
app.py
import os
import socket
from flask import Flask
from redis import Redis
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 'hostname is %s and hits %s times' % (socket.gethostname(),redis.get('hits'))
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80, debug=True)
次のコマンドを使用してテストします.
docker-compose up -d
docker-compose up --scale web=5 -d
curl http://127.0.0.1:8080
hostname is 417fc5a4f3a3 and hits b'1'
curl http://127.0.0.1:8080
hostname is e3655104f679 and hits b'2'
curl http://127.0.0.1:8080
hostname is 00ac6b67ed40 and hits b'3'
curl http://127.0.0.1:8080
hostname is 0d3c85986304 and hits b'4'