用 Docker Compose 十分钟搭好本地 Python + Redis 开发环境

举报
yd_286230449 发表于 2026/10/29 20:28:47 2026/10/29
【摘要】 很多新手第一次接触 Docker,会卡在“一个容器好跑,多个服务怎么连起来”这一步。本文用一个最小例子:Flask 网页计数器 + Redis,演示 Docker Compose 如何把多个服务编排在一起,一条命令启动、一条命令销毁。一、准备工作确保本机已安装 Docker(Docker Desktop 或 Linux 上的 docker-ce 均可),终端执行 docker compose...

很多新手第一次接触 Docker,会卡在“一个容器好跑,多个服务怎么连起来”这一步。本文用一个最小例子:Flask 网页计数器 + Redis,演示 Docker Compose 如何把多个服务编排在一起,一条命令启动、一条命令销毁。

一、准备工作
确保本机已安装 Docker(Docker Desktop 或 Linux 上的 docker-ce 均可),终端执行 docker compose version 能看到版本号即可。新建目录 counter-demo,下面所有文件都放在这里。

二、写应用代码
app.py:

from flask import Flask
import redis, os
app = Flask(__name__)
r = redis.Redis(host=os.getenv("REDIS_HOST", "redis"), port=6379)
@app.route("/")
def index():
    n = r.incr("hits")
    return f"这个页面已被访问 {n} 次"
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

requirements.txt:

flask
redis

注意 host 写的是 redis,而不是 localhost。在 Compose 创建的默认网络里,服务名就是主机名,这是新手最容易踩的坑。三、编写 Dockerfile

FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]

先复制 requirements.txt 再安装依赖,可以利用镜像层缓存:只改业务代码时不会重新安装依赖,构建速度快很多。

四、编写 compose.yaml

services:
  web:
    build: .
    ports:
      - "5000:5000"
    environment:
      - REDIS_HOST=redis
    depends_on:
      - redis
  redis:
    image: redis:7-alpine
    volumes:
      - redis-data:/data
volumes:
  redis-data:

这里有三个要点:ports 把容器 5000 端口映射到宿主机;depends_on 保证 redis 先启动(只保证启动顺序,不保证就绪,生产环境建议配合 healthcheck);命名卷 redis-data 让计数在容器重建后依然保留。五、启动与验证

docker compose up -d --build

浏览器打开 http://localhost:5000,每刷新一次数字加一。常用命令:
docker compose ps 查看服务状态
docker compose logs -f web 跟踪日志
docker compose down 停止并删除容器(数据卷保留)
docker compose down -v 连同数据卷一起删除

六、几个实用建议

  1. 开发阶段可以给 web 服务加 volumes: - .:/app 挂载源码,配合 Flask debug 模式实现热更新。
  2. 敏感配置放进 .env 文件,Compose 会自动读取,记得加入 .gitignore。
  3. 镜像优先选 slim 或 alpine 版本,体积小、拉取快。

小结:Docker Compose 的价值在于把“环境说明文档”变成可执行的配置文件。新同事拿到仓库,只需一条 docker compose up 就能拥有和你完全一致的开发环境。掌握这个最小例子后,再加数据库、消息队列也只是多写几行 YAML 的事。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。