06-Dockerシングルマシンマルチコンテナアプリケーションの導入


Dockerスタンドアロンマルチコンテナアプリケーションの導入
  • 1. 実験記述
  • 2. Redisコンテナ
  • の作成
  • 3.flask-redisコンテナ
  • の作成
  • 3.1 flask-redisミラー
  • を作成する
  • 3.2 flask-redisコンテナ
  • を作成する
  • 4. 実験
  • 1.実験説明
    pythonはredisの簡単なDemoを操作し、2つのDockerコンテナを作成します.
  • redis:redis
  • の導入
  • flask-redis:python開発の単純なDemoを導入し、Demoはredis
  • を操作する必要がある
    flask-redisのプログラムコード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.
    '
    % (redis.get('hits'),socket.gethostname()) if __name__ == "__main__": app.run(host="0.0.0.0", port=5000, debug=True)

    flask-redisコンテナを作成するDockerfileは次のとおりです.
    FROM python:2.7
    LABEL maintaner="Peng Xiao [email protected]"
    COPY . /app
    WORKDIR /app
    RUN pip install flask redis
    EXPOSE 5000
    CMD [ "python", "app.py" ]
    

    2.redisコンテナの作成
    [root@eshop-cache05 flask-redis]# docker run -d --name redis redis
    35bb18f15b00c65df7996368c28da64ec1f5021d5ea1b732d6754c3ff9a653bd
    
    [root@eshop-cache05 flask-redis]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    35bb18f15b00        redis               "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        6379/tcp   
    

    3.flask-redisコンテナの作成
    3.1 flask-redisミラーの作成
    Dockerfileに基づいてflask-redisミラーを作成するには、次の手順に従います.
    //   flask-redis  
    [root@eshop-cache05 opt]# mkdir flask-redis
    
    //   flask-redis  
    [root@eshop-cache05 opt]# cd flask-redis/
    
    // app.py   Dockerfile      
    [root@eshop-cache05 flask-redis]# ls
    app.py  Dockerfile
    
    //  flask-redis  
    [root@eshop-cache05 flask-redis]# docker build -t happyaged/flask-redis .
    
    [root@eshop-cache05 flask-redis]# docker images
    REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
    happyaged/flask-redis            latest              608961b91535        5 minutes ago       916MB
    

    3.2 flask-redisコンテナの作成
    [root@eshop-cache05 flask-redis]# docker run -d --link redis --name flask-redis -e REDIS_HOST=redis happyaged/flask-redis 
    e00022f018f376ffc75d65b6adda1b3990adc5d38af89a3a97b2b64b9fbc1e16
    

    -d:バックグラウンドで-link:redisを実行し、作成したコンテナはredisという名前で直接アクセスできる前に作成したredisコンテナ-name:flask-redis、作成したコンテナの名前-e:REDIS_HOST=redis、コンテナの環境変数REDIS_を設定HOST値がredis
    4.実験
    //  flask-redis  :
    [root@eshop-cache05 flask-redis]# docker exec -it flask-redis /bin/bash
    
    //  py  
    root@e00022f018f3:/app# curl 127.0.0.1:5000
    Hello Container World! I have been seen 1 times and my hostname is e00022f018f3.
    root@e00022f018f3:/app# curl 127.0.0.1:5000
    Hello Container World! I have been seen 2 times and my hostname is e00022f018f3.
    

    ただし、コンテナを終了すると、ホストではアクセスできません.
    root@e00022f018f3:/app# exit
    exit
    [root@eshop-cache05 flask-redis]# curl 127.0.0.1:5000
    curl: (7) Failed connect to 127.0.0.1:5000; Connection refused
    

    flask-redisコンテナ以外にもアクセスできる場合は、5000ポートを露出する前に元のflask-redisコンテナを削除し、flask-redisコンテナを再作成し、5000ポートを露出する必要があります.以下のようにします.
    [root@eshop-cache05 flask-redis]# docker run -d -p 5000:5000 --link redis --name flask-redis -e REDIS_HOST=redis happyaged/flask-redis 
    9e714e5b56a694649a823c132204c68a49996026f0e2fd2420be06d602b58676
    

    ホストアクセス:
    [root@eshop-cache05 flask-redis]# curl 127.0.0.1:5000
    Hello Container World! I have been seen 3 times and my hostname is 9e714e5b56a6.
    

    他のマシンにもアクセスできます.
    [root@eshop-cache04 ~]# curl 172.28.65.126:5000
    Hello Container World! I have been seen 4 times and my hostname is 9e714e5b56a6.