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

举报
yd_276596855 发表于 2026/11/02 05:15:57 2026/11/02
【摘要】 很多人学 Docker 时卡在一个地方:单个容器会跑了,但项目一旦需要数据库、缓存等多个服务,就要手动敲一长串 docker run 命令,还容易忘记端口和网络配置。Docker Compose 就是为这个问题而生的:用一个 YAML 文件描述整套环境,一条命令启动。一、示例场景做一个最小的访问计数器:Python Flask 提供网页,每次访问把计数存进 Redis。二、目录结构count...

很多人学 Docker 时卡在一个地方:单个容器会跑了,但项目一旦需要数据库、缓存等多个服务,就要手动敲一长串 docker run 命令,还容易忘记端口和网络配置。Docker Compose 就是为这个问题而生的:用一个 YAML 文件描述整套环境,一条命令启动。

一、示例场景

做一个最小的访问计数器:Python Flask 提供网页,每次访问把计数存进 Redis。

二、目录结构

counter/
• app.py
• requirements.txt
• Dockerfile
• docker-compose.yml

三、应用代码 app.py

from flask import Flask
import redis

app = Flask(__name__)
cache = redis.Redis(host="redis", port=6379)

@app.route("/")
def index():
    count = cache.incr("hits")
    return f"这是第 {count} 次访问"

requirements.txt 内容为两行:flask 和 redis。

注意 host 写的是 redis 而不是 localhost。Compose 会把同一项目的服务放进同一个网络,并用服务名做 DNS 解析,这是初学者最容易踩的坑。

四、Dockerfile

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

先复制 requirements.txt 再安装依赖,可以利用镜像层缓存:只改业务代码时不会重新 pip install。

五、docker-compose.yml

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

六、启动与验证

docker compose up -d --build
curl http://localhost:5000

多执行几次 curl,数字会递增。

七、常用命令

  • docker compose ps:查看服务状态
  • docker compose logs -f web:追踪日志
  • docker compose down:停止并删除容器,数据卷保留
  • docker compose down -v:连数据卷一起删除,计数归零

八、两个小建议

1. depends_on 只保证启动顺序,不保证 Redis 已经就绪。生产环境可以配合 healthcheck 和 condition: service_healthy 使用。

2. 密码等敏感配置不要写死在 YAML 里,用 .env 文件配合 ${VAR} 引用,并把 .env 加进 .gitignore。

总结

Compose 的价值在于"环境即代码"。把这个 YAML 提交到仓库,新同事克隆下来一条命令就能得到和你一样的环境,再也不用说"在我电脑上能跑"。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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