用 Docker Compose 三步搭好本地 Python + Redis 开发环境
【摘要】 很多同学刚接触后端开发时,最头疼的不是写代码,而是配环境:本机 Python 版本和项目要求不一致,Redis 装了又卸,换台电脑又得从头来一遍。其实用 Docker Compose,只要一个配置文件,就能让整套开发环境"随身携带"。本文用一个最小的 Flask + Redis 计数器示例,演示三步搭好可复现的本地环境。一、准备项目文件新建目录 demo,放入三个文件。app.py:from...
很多同学刚接触后端开发时,最头疼的不是写代码,而是配环境:本机 Python 版本和项目要求不一致,Redis 装了又卸,换台电脑又得从头来一遍。其实用 Docker Compose,只要一个配置文件,就能让整套开发环境"随身携带"。本文用一个最小的 Flask + Redis 计数器示例,演示三步搭好可复现的本地环境。
一、准备项目文件
新建目录 demo,放入三个文件。
app.py:
from flask import Flask
import redis, os
app = Flask(__name__)
r = redis.Redis(host=os.getenv("REDIS_HOST", "localhost"), port=6379)
@app.route("/")
def index():
count = r.incr("hits")
return f"Hello Docker! 本页已被访问 {count} 次"
requirements.txt:
flask==3.0.3
redis==5.0.8
Dockerfile:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt -i https://repo.huaweicloud.com/repository/pypi/simple
COPY . .
CMD ["flask", "--app", "app", "run", "--host=0.0.0.0", "--port=5000"]
这里有两个小技巧:先单独复制 requirements.txt 再安装依赖,可以充分利用镜像层缓存,只改代码时不必重新下载依赖;使用国内 PyPI 镜像源能明显加快构建速度。
二、编写 docker-compose.yml
services:
web:
build: .
ports:
- "5000:5000"
environment:
- REDIS_HOST=redis
volumes:
- .:/app
depends_on:
- redis
redis:
image: redis:7-alpine
volumes:
- redis-data:/data
volumes:
redis-data:
几个关键点:
- 服务之间通过服务名互相访问,所以 Flask 里 REDIS_HOST 填 redis 即可,不需要写 IP。
- volumes 把当前目录挂载进容器,修改代码后刷新浏览器就能看到效果,开发体验接近本机。
- redis-data 是命名卷,容器删除后计数数据依然保留。
- depends_on 只保证启动顺序,并不保证 Redis 已就绪;生产环境建议加 healthcheck 或在代码里做重试。
三、一条命令启动
docker compose up -d --build
启动后访问 http://localhost:5000,每刷新一次计数加一。常用命令:
- docker compose logs -f web:实时查看应用日志
- docker compose exec redis redis-cli get hits:直接查看 Redis 中的值
- docker compose down:停止并删除容器(加 -v 会连数据卷一起删除,谨慎使用)
四、常见问题
- 端口被占用:把 ports 改成 “5001:5000”,左边是宿主机端口,右边是容器端口。
- 修改了
requirements.txt不生效:需要加 --build 重新构建镜像。 - Windows 下挂载目录后文件变更不触发重载:可以在 WSL2 的 Linux 文件系统中存放项目,性能和兼容性都更好。
总结
Docker Compose 的价值在于把"环境"也变成了代码:团队成员拉下仓库,一条命令就能得到完全一致的开发环境,新同事上手从半天缩短到几分钟。掌握了这个最小示例,再往里加 MySQL、Nginx 等服务,思路完全相同。后续如果要上云,同一份镜像也可以直接推送到华为云 SWR 镜像仓库,再部署到 CCE 或云服务器上,实现开发与生产环境的一致。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)