当前位置: 首页 > news >正文

练手项目1:Dockerized Redis访问计数器

以下是一个结合Python、Redis和Docker的简单项目设计方案,实现一个带有访问次数统计的Web应用:

技术栈

  • Python 3.x

  • Flask Web框架

  • Redis数据库

  • Docker

项目结构

redis-counter/
├── app/
│   ├── app.py
│   └── requirements.txt
├── docker-compose.yml
└── Dockerfile

1. 创建Flask应用 (app/app.py)

from flask import Flask
import redis

app = Flask(__name__)
redis_client = redis.Redis(host='redis', port=6379, db=0)

@app.route('/')
def counter():
    count = redis_client.incr('hits')
    return f'本页面已被访问 {count} 次'

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

 2. 创建依赖文件 (app/requirements.txt)

flask==3.0.2
redis==5.0.1

3. 创建Dockerfile

# 使用官方Python基础镜像
FROM python:3.11-slim

# 设置工作目录
WORKDIR /app

# 复制依赖文件
COPY app/requirements.txt .

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 复制应用代码
COPY app/ .

# 暴露端口
EXPOSE 5000

# 启动命令
CMD ["python", "app.py"]

4. 创建docker-compose.yml

version: '3.8'

services:
  web:
    build: .
    ports:
      - "5000:5000"
    depends_on:
      - redis
    networks:
      - app-network

  redis:
    image: "redis:alpine"
    ports:
      - "6379:6379"
    volumes:
      - redis-data:/data
    networks:
      - app-network

volumes:
  redis-data:

networks:
  app-network:

操作步骤

1.构建并启动服务

docker-compose up --build

2.访问应用

        打开浏览器访问 http://localhost:5000 ,每次刷新页面都会看到访问次数增加

3.停止服务

docker-compose down

生成独立镜像 

# 构建Web应用镜像
docker build -t redis-counter-web .

# 查看生成的镜像
docker images | grep redis-counter-web

项目特点

  1. 使用Redis持久化存储访问计数

  2. 通过Docker Compose管理多容器应用

  3. 使用独立的Docker网络进行容器间通信

  4. Redis数据持久化存储(通过volume)

  5. 完整的容器化部署方案

这个项目展示了以下关键技术点:

  • Python Web应用与Redis的集成

  • Docker多容器应用的编排

  • 容器间的网络通信

  • 数据持久化存储

  • Docker镜像的构建和管理

相关文章:

  • 【AI】MAC版本本地Stable Diffusion web ui安装
  • 深度剖析:域名与DNS安全的全方位解读
  • UFS Explorer Technician:处理最具挑战性数据恢复及取证案例
  • 【0】数据结构的绪论章
  • DS足球监控【比分直播】监控,钉钉实现自动提醒
  • MySQL-存储过程
  • 05.AI搭建preparationの(transformers01)BertTokenizer实现分词编码
  • 命令模式(Command Pattern)★
  • Linux内核调试 - Hung_task机制分析上
  • 语言模型理论基础-持续更新-思路清晰
  • 无人机螺旋桨平衡标准
  • LangChain开发(二)LangChain提示词模板Template使用
  • 2.7 进度控制习题-2
  • 【JS】反转字符串中的单词
  • 计算机网络基础:WiFi 与蓝牙的原理与应用
  • JavaScript中的继承有哪些方式?各有什么优缺点
  • 强化学习与神经网络结合(以 DQN 展开)
  • STL之空间配置器
  • 【深度学习与实战】2.1、线性回归模型与梯度下降法先导
  • 数据结构:利用递推式计算next表
  • 马上评|子宫肌瘤惊现男性患者,如此论文何以一路绿灯?
  • 巴菲特再谈投资日本:希望持有日本五大商社至少50年
  • 陈芋汐世界杯总决赛卫冕夺冠,全红婵无缘三大赛“全满贯”
  • 泽连斯基拒绝普京72小时停火提议,坚持应尽快实现30天停火
  • 传奇落幕!波波维奇卸任马刺队主教练,转型全职球队总裁
  • 上海浪琴环球马术冠军赛明日启幕!五一假期在这里感受精彩