

























2026-04-15 17:58 xiashengwang 阅读(10) 评论() 收藏 举报
一个简单的web网页,点击按钮计数器加1,用python+redis实现

app.py
import os
import redis
from flask import Flask
app = Flask(__name__)
# 从环境变量获取 Redis 地址,如果未设置则默认用 'redis'
redis_host = os.environ.get('REDIS_HOST', 'redis')
redis_client = redis.Redis(host=redis_host, port=6379, db=0)
@app.route('/')
def hello():
count = redis_client.incr('visits')
return f'Hello! This page has been visited {count} times.'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
编写requirements.txt
flask==2.3.3
redis==5.0.1
Dockerfile 是 Docker 用来构建镜像的蓝图。
在项目的同目录下新建Dockerfile(没有扩展名,注意不要写成 Dockerfile.txt)。
# 使用轻量级 Python 3.9 镜像
FROM python:3.9-slim
# 设置工作目录(容器内的路径)
WORKDIR /app
# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码到容器中
COPY app.py .
# 暴露应用运行的端口
EXPOSE 5000
# 启动命令
CMD ["python", "app.py"]
Docker Compose 文件用于定义和管理多个容器。这里我们要启动两个容器:一个是我们自己的应用,一个是 Redis。
项目根目录下建立一个docker-compose.yml文件
docker-compose.yml
version: '3'
services:
redis:
image: redis:alpine
restart: always
volumes:
- redis-data:/data
web:
build: .
ports:
- "5000:5000"
environment:
- REDIS_HOST=redis
depends_on:
- redis
restart: always
volumes:
redis-data:
解释:
打开powershell,切换到本项目的根目录。
运行如下命令:
docker build -t my-flask-app .
报错了,原因是Docker hub在国外,网络连接超时,需要配置国内镜像。

配置镜像

镜像如果不可用,这里有可用数据源的实时更新(太难了)
https://github.com/dongyubin/DockerHub?tab=readme-ov-file
切换镜像源后,再次运行docker build -t my-flask-app .编译通过了。

这里可以看到刚才编译生成的image

docker-compose up -d启动容器。
用docker-compose ps查看容器是否运行。

浏览器输入:
http://localhost:5000/

页面每次刷新,计数器加1,说明部署成功的:

docker-compose down
这个会删除当前的容器,但不会删除redis的数据。如果要删除数据需要:
docker-compose down -v
手动构建和运行(可选,了解底层命令)
如果你只想用 docker run 而不是 docker-compose,也可以手动运行两个容器,但需要自己创建网络和连接。这有助于理解 Compose 背后做了什么。
创建一个自定义网络
docker network create my-network
运行 Redis 容器
docker run -d --name my-redis --network my-network redis:alpine
运行你的应用容器
docker run -d --name my-web --network my-network -p 5000:5000 -e REDIS_HOST=my-redis my-flask-app
然后同样访问 http://localhost:5000 即可。(实际测试可行)
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。