实验:
[root@ml cs]# ls
app.py docker-compose.yml Dockerfile
Dockerfile内容:
FROM python:2.7 LABEL maintaner="meml meml75020@gmail.com" COPY . /app WORKDIR /app RUN pip install flask redis EXPOSE 80 CMD [ "python", "app.py" ]
docker-compose.yml 内容:
version: "3" services: redis: image: redis web: build: context: . dockerfile: Dockerfile ports: ["8080"] environment: REDIS_HOST: redis lb: image: dockercloud/haproxy links: - web ports: - 80:80 volumes: - /var/run/docker.sock:/var/run/docker.sock
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)
#启动
[root@ml cs]# docker-compose up -d
Creating cs_web_1 ... done
Creating cs_redis_1 ... done
Creating cs_lb_1 ... done
#查看一下,有一个redis、web、haproxy(lb)
[root@ml cs]# docker-compose ps
Name Command State Ports ---------------------------------------------------------------------------------- cs_lb_1 /sbin/tini -- dockercloud- Up 1936/tcp, 443/tcp, ... 0.0.0.0:80->80/tcp cs_redis_1 docker-entrypoint.sh redis Up 6379/tcp ... cs_web_1 python app.py Up 80/tcp, 0.0.0.0:32768->8080/tcp
#使用--scale 参数启动3个web,注意的是这里的web=3是对应docker-compose.yml内容中的services: 下的名字,如果启动三个redis则redis=3,三个haproxy则lb=3
[root@ml cs]# docker-compose up --scale web=3 -d
Starting cs_web_1 ... Starting cs_web_1 ... done Creating cs_web_2 ... done Creating cs_web_3 ... done cs_lb_1 is up-to-date
#在查一下,发现已经有三个web了
[root@ml cs]# docker-compose ps
Name Command State Ports ---------------------------------------------------------------------------------- cs_lb_1 /sbin/tini -- dockercloud- Up 1936/tcp, 443/tcp, ... 0.0.0.0:80->80/tcp cs_redis_1 docker-entrypoint.sh redis Up 6379/tcp ... cs_web_1 python app.py Up 80/tcp, 0.0.0.0:32768->8080/tcp cs_web_2 python app.py Up 80/tcp, 0.0.0.0:32769->8080/tcp cs_web_3 python app.py Up 80/tcp, 0.0.0.0:32770->8080/tcp
#访问(访问的是haproxy它做了端口映射的,web它们的端口是8080,因为web数量多做不了端口映射会有端口冲突)
[root@ml cs]# curl 127.0.0.1
Hello Container World! I have been seen 1 times and my hostname is 48e683350c0a. #显示访问次数以及主机名
[root@ml cs]# curl 127.0.0.1
Hello Container World! I have been seen 2 times and my hostname is 9efbe3e7e4d0.
[root@ml cs]# curl 127.0.0.1
Hello Container World! I have been seen 3 times and my hostname is 8d0b962ae23a.
[root@ml cs]# curl 127.0.0.1
Hello Container World! I have been seen 4 times and my hostname is 48e683350c0a.
[root@ml cs]# curl 127.0.0.1
Hello Container World! I have been seen 5 times and my hostname is 9efbe3e7e4d0.