06-Dockerシングルマシンマルチコンテナアプリケーションの導入
9124 ワード
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は次のとおりです.
flask-redisコンテナを作成するDockerfileは次のとおりです.
2.redisコンテナの作成
3.flask-redisコンテナの作成
3.1 flask-redisミラーの作成
Dockerfileに基づいてflask-redisミラーを作成するには、次の手順に従います.
3.2 flask-redisコンテナの作成
-d:バックグラウンドで-link:redisを実行し、作成したコンテナはredisという名前で直接アクセスできる前に作成したredisコンテナ-name:flask-redis、作成したコンテナの名前-e:REDIS_HOST=redis、コンテナの環境変数REDIS_を設定HOST値がredis
4.実験
ただし、コンテナを終了すると、ホストではアクセスできません.
flask-redisコンテナ以外にもアクセスできる場合は、5000ポートを露出する前に元のflask-redisコンテナを削除し、flask-redisコンテナを再作成し、5000ポートを露出する必要があります.以下のようにします.
ホストアクセス:
他のマシンにもアクセスできます.
pythonはredisの簡単なDemoを操作し、2つのDockerコンテナを作成します.
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.