Python Flask + Redis 程序练习

2022-06-06 20:27:45

目录1.程序准备2.镜像准备3.创建一个dockerbridge4.创建rediscontainer5.创建flaskcontainer6.查看页面7.总结两个容器,一个flask-demo,一...

目录
1.程序准备
2.镜像准备
3.创建一个docker bridge
4.创建redis container
5.创建flask container
6.查看页面
7.总结

两个容器,一个flask-demo,一个是redis-server
在一个自定义网络bridge,相互ping,不需要知道ip,只用名字就能ping通

在这里插入图片描述

1.程序准备

准备一个python文件,名字为 app.py 内容如下:

提供一个web服务,可以访问地址,返回一个Hello Container World!..并且记录访问的次数。

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 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-slim

RUN pip install flask redis && 
  groupadd -r flask && useradd -r -g flask flask && 
  mkdir /src && 
  chown -R flask:flask /src

USER flask

COPY app.py /src/app.py

WORKDIR /src

ENV FLASK_APP=app.py REDIS_HOST=redis

EXPOSE 5000

CMD ["flask", "run", "-h", "0.0.0.0"]

2.镜像准备

构建flask镜像,准备一个redis镜像。

$ docker image pull redis
$ docker image build -t flask-demo .
$ docker image ls
REPOSITORY  TAG     IMAGE ID    CREATED       SIZE
flask-demo  latest    4778411a24c5  About a minute ago  126MB
python    3.9.5-slim  c71955050276  8 days ago      115MB
redis    latest    08502081bff6  2 weeks ago     105MB

3.创建一个docker bridge

$ docker network create -d bridge demo-network
8005f4348c44ffe3cdcbbda165beea2b0cb520179d3745b24e8f9e05a3e6456d
$ docker network ls
NETWORK ID   NAME      DRIVER  SCOPE
2a464c0b8ec7  bridge     bridge  local
8005f4348c44  demo-network  bridge  local
80b63f711a37  host      host   local
fae746a75be1  none      null   local
$

4.创建redis container

创建一个叫 redis-server container,连到demo-network

$ docker container run -d --name redis-server --network demo-network redis
002800c265020310231d689e6fd35bc084a0fa015e8b0a3174aa2c5e29824c0e
$ docker container ls
CONTAINER ID  IMAGE   COMMAND         CREATED     STATUS     PORTS   NAMES
002800c26502  redis   "docker-entrypoint.s…"  4 seconds ago  Up 3 seconds  6379/tcp  redis-server

5.创建flask container

注意:--env REDIS_HOST=rehttp://www.cppcns.comdis-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

6.查看页面

打开浏览器访问http://127.0.0.1:5000

应该能看到类似下面的内容,每次刷新页面,计数加1

Hello Container World! I have been seen 36 times and my hostname is 925ecb8d111a.

7.总结

如果把上面的步骤合并到一起,成为一个部署脚本:

# 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 Flask + Redis 程序练习的文章就介绍到这了,更多相关Python Flask + Redis 练习内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!