實驗:
[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.