Python Flask + Redis 练习 两个容器,一个flask-demo,一个是redis-server
在一个自定义网络bridge,相互ping
,不需要知道ip
,只用名字就能ping
通
文章图片
程序准备 准备一个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
推荐阅读
- Python每日一练|Python每日一练(牛客新题库)——第11天(循环语句)
- Python每日一练|Python每日一练(牛客新题库)——第13天(条件语句)
- Python每日一练|Python每日一练(牛客新题库)——第14天(元组、字典练习)
- python|python篇 习题(循环语句)
- python编程习题(循环语句)
- Python基础/Python进阶一对一答疑
- 饿了么数据采集app爬虫
- 测试基础|如何自学软件测试、包装简历实现华丽转行()
- 职场经验|JMeter中如何实现接口之间的关联()