Docker系列|【Docker系列】Python Flask + Redis 练习程序

Python Flask + Redis 练习 两个容器,一个flask-demo,一个是redis-server
在一个自定义网络bridge,相互ping,不需要知道ip,只用名字就能ping
Docker系列|【Docker系列】Python Flask + Redis 练习程序
文章图片

程序准备 准备一个Python文件,名字为 app.py 内容如下:
提供一个web服务,可以访问地址,返回一个Hello Container World!..并且记录访问的次数。

from flask import Flask from redis import Redis import os import socketapp = Flask(__name__) redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)@app.route('/') def hello(): redis.incr('hits') return f"Hello Container World! I have been seen {redis.get('hits').decode('utf-8')} times and my hostname is {socket.gethostname()}.\n"

准备一个Dockerfile
FROM python:3.9.5-slimRUN pip install flask redis && \ groupadd -r flask && useradd -r -g flask flask && \ mkdir /src && \ chown -R flask:flask /srcUSER flaskCOPY app.py /src/app.pyWORKDIR /srcENV FLASK_APP=app.py REDIS_HOST=redisEXPOSE 5000CMD ["flask", "run", "-h", "0.0.0.0"]

镜像准备 【Docker系列|【Docker系列】Python Flask + Redis 练习程序】构建flask镜像,准备一个redis镜像。
$ docker image pull redis $ docker image build -t flask-demo . $ docker image ls REPOSITORYTAGIMAGE IDCREATEDSIZE flask-demolatest4778411a24c5About a minute ago126MB python3.9.5-slimc719550502768 days ago115MB redislatest08502081bff62 weeks ago105MB

创建一个docker bridge
$ docker network create -d bridge demo-network 8005f4348c44ffe3cdcbbda165beea2b0cb520179d3745b24e8f9e05a3e6456d $ docker network ls NETWORK IDNAMEDRIVERSCOPE 2a464c0b8ec7bridgebridgelocal 8005f4348c44demo-networkbridgelocal 80b63f711a37hosthostlocal fae746a75be1nonenulllocal $

创建redis container 创建一个叫 redis-server 的container,连到 demo-network上
$ docker container run -d --name redis-server --network demo-network redis 002800c265020310231d689e6fd35bc084a0fa015e8b0a3174aa2c5e29824c0e $ docker container ls CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 002800c26502redis"docker-entrypoint.s…"4 seconds agoUp 3 seconds6379/tcpredis-server

创建flask container 注意:--env REDIS_HOST=redis-server 这样app.py中的REDIS_HOST就可以访问redis服务了!
$ docker container run -d --network demo-network --name flask-demo --env REDIS_HOST=redis-server -p 5000:5000 flask-demo

查看页面 打开浏览器访问 http://127.0.0.1:5000
应该能看到类似下面的内容,每次刷新页面,计数加1
Hello Container World! I have been seen 36 times and my hostname is 925ecb8d111a.
总结 如果把上面的步骤合并到一起,成为一个部署脚本
# prepare image docker image pull redis docker image build -t flask-demo .# create network docker network create -d bridge demo-network# create container docker container run -d --name redis-server --network demo-network redis docker container run -d --network demo-network --name flask-demo --env REDIS_HOST=redis-server -p 5000:5000 flask-demo

    推荐阅读