用 Docker Compose 十分钟搭好本地开发环境:Python + Redis 实战
【摘要】 很多人学 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)