用 Docker Compose 管住本地开发依赖:一个最小可用的实例

举报
yd_292401754 发表于 2026/10/22 16:48:06 2026/10/22
【摘要】 为什么要用 Compose 管本地依赖本地开发最烦的不是写业务代码,而是"我的电脑上到底装了什么"。PostgreSQL 装成 14 还是 16、Redis 有没有开持久化、同事的机器上能跑而我的报端口占用——这些问题靠一份 README 是说不清的。Docker Compose 的价值就在于把这些依赖写成声明式配置:一条 `docker compose up -d` 起来,一条 `dock...

为什么要用 Compose 管本地依赖

本地开发最烦的不是写业务代码,而是"我的电脑上到底装了什么"。PostgreSQL 装成 14 还是 16、Redis 有没有开持久化、同事的机器上能跑而我的报端口占用——这些问题靠一份 README 是说不清的。

Docker Compose 的价值就在于把这些依赖写成声明式配置:一条 `docker compose up -d` 起来,一条 `docker compose down -v` 清干净,任何人 clone 仓库后行为一致。

一个最小可用的 compose.yaml

假设我们有一个 Python 服务,依赖 PostgreSQL 和一个 Redis 做缓存:

services:
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: dev
POSTGRES_PASSWORD: devpass
POSTGRES_DB: app
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U dev -d app"]
interval: 5s
retries: 10

cache:
image: redis:7-alpine
command: ["redis-server", "--appendonly", "yes"]
ports:
- "6379:6379"

api:
build: .
environment:
DATABASE_URL: postgresql://dev:devpass@db:5432/app
REDIS_URL: redis://cache:6379/0
depends_on:
db:
condition: service_healthy
ports:
- "8000:8000"

volumes:
pgdata:

几个容易踩的点:

1. **`depends_on` 默认只等容器启动,不等服务可用**。要等数据库真的能连,必须配合 `healthcheck` \+ `condition: service_healthy`,否则第一次启动时应用会因为连不上库直接退出。 2. **`localhost` 在容器里指向容器自己**。连接串里必须写服务名 `db`、`cache`,这是新手最常见的报错来源。 3. **端口映射写 `"5432:5432"` 而不是 `5432`**,只写一个数字会随机映射到宿主机端口,本地客户端就连不上了。 4. **数据要放 named volume**。不挂 volume 的话,`down` 之后数据全丢,调试时容易误判是代码问题。

日常怎么用

# 起依赖,不动本地 Python,方便在 IDE 里打断点
docker compose up -d db cache

# 只看某一个服务的日志
docker compose logs -f api

# 改了 Dockerfile 之后重建
docker compose up -d --build api

# 彻底清理,包括数据卷
docker compose down -v

我最常用的其实是第一条:数据库和缓存放容器里,业务代码留在宿主机跑。这样既有环境隔离,又能保留 IDE 的热重载和断点调试,比整套服务都塞进容器舒服得多。

小结

Compose 不是"上生产"的工具,它解决的是**开发环境的可复现性**。把依赖版本、初始化参数、健康检查都写进 `compose.yaml`,团队里"我这跑不起来"的对话会少一大半。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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