用 Docker Compose 十分钟搭好本地 Python + Redis 开发环境
很多新手第一次接触 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 连同数据卷一起删除
六、几个实用建议
- 开发阶段可以给 web 服务加 volumes: - .:/app 挂载源码,配合 Flask debug 模式实现热更新。
- 敏感配置放进 .env 文件,Compose 会自动读取,记得加入 .gitignore。
- 镜像优先选 slim 或 alpine 版本,体积小、拉取快。
小结:Docker Compose 的价值在于把“环境说明文档”变成可执行的配置文件。新同事拿到仓库,只需一条 docker compose up 就能拥有和你完全一致的开发环境。掌握这个最小例子后,再加数据库、消息队列也只是多写几行 YAML 的事。
- 点赞
- 收藏
- 关注作者
评论(0)