Python Flask + Redis 程序练习

作者:小叶柏杉 时间:2022-07-26 13:49:55 

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

Python Flask + Redis 程序练习

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

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

来源:https://blog.csdn.net/weixin_48447848/article/details/122612582

标签:Python,Flask,Redis
0
投稿

猜你喜欢

  • 分析用Python脚本关闭文件操作的机制

    2021-01-25 07:03:26
  • 使用Docker部署ASP.NET Core程序

    2024-06-05 09:24:56
  • 理解 SQL Server 中系统表Sysobjects

    2009-01-20 15:13:00
  • 详解Python中的Cookie模块使用

    2023-01-02 21:30:39
  • Python图像处理实现两幅图像合成一幅图像的方法【测试可用】

    2022-11-13 08:36:56
  • Vue mockjs编写假数据并请求获取实现流程

    2024-04-28 09:27:22
  • ASP自动清除ACCESS数据库的日文字符

    2007-11-28 17:40:00
  • web前端开发也需要日志

    2024-04-18 10:04:05
  • Python使用剪切板的方法

    2022-01-25 02:17:39
  • Mysql表的约束超详细讲解

    2024-01-20 07:43:11
  • Python+tkinter编写一个最近很火的强制表白神器

    2022-10-25 07:42:10
  • Python中shapefile转换geojson的示例

    2023-08-03 19:05:04
  • Python表示矩阵的方法分析

    2022-06-24 01:31:59
  • Python使用add_subplot与subplot画子图操作示例

    2022-12-15 13:14:28
  • python paramiko利用sftp上传目录到远程的实例

    2023-08-10 02:53:23
  • 浅谈python import引入不同路径下的模块

    2022-03-12 14:21:38
  • pandas筛选某列出现编码错误的解决方法

    2021-10-18 02:48:05
  • Python实现的批量修改文件后缀名操作示例

    2021-08-28 08:34:58
  • python备份文件以及mysql数据库的脚本代码

    2024-01-21 03:42:01
  • PyQt5 在QListWidget自定义Item的操作

    2023-07-05 16:35:49
  • asp之家 网络编程 m.aspxhome.com