docker-compose 用--scale 參數快速實現一個負載均衡(單節點)


實驗:

[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.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM