一个简单的python web应用,需要访问redis,web应用与redis应用在不同的容器中,下面实现两个容器的访问。
1、创建app.py 与 Dockerfile
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 'kick %s times.\n' % redis.get('hits')
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)
Dockerfile
FROM python:2.7
LABEL maintaner="sldsldzzz@163.com"
COPY . /app
WORKDIR /app
RUN pip install flask redis
EXPOSE 5000
CMD [ "python", "app.py" ]
2、启动redis
执行:docker run -d --name redis redis
通过docker ps查看容器是否启动成功
3、创建python应用镜像
执行:docker build -t flask-redis-demo .
启动flask应用:docker run -d --link redis --name flask-redis -e REDIS_HOST=redis flask-redis-demo
查看容器是否启动成功
4、访问redis
进入flask容器:docker exec -it flask-redis /bin/bash
虽然在容器内可以访问redis,但是在本地却无法访问,这时要将python应用的容器端口做一个映射。
5、端口映射
停止web应用:docker stop flask-redis
删除flask-redis:docker rm flask-redis
重新执行命令,增加-p参数:docker run -d -p 5000:5000 --link redis --name flask-redis -e REDIS_HOST=redis flask-redis-demo
这时就可在本地访问了: