用 Docker Compose 一个文件搭起本地开发环境
很多同学第一次接触 Docker,都是在终端里手敲 docker run,一条条把数据库、缓存、后端服务拉起来。命令越堆越长,端口记不住,换个机器又要重新回忆一遍。其实只要一个 docker-compose.yml,就能把这些零散命令收进一个文件,一条 docker compose up 全部启动。
Compose 解决的核心问题是「多容器应用」的声明化:镜像、端口、数据卷、环境变量、依赖顺序都写进 YAML。文件进 Git,团队任何人 clone 之后跑同一条命令,环境就一致了。
一个最小例子:Python Web 服务 + PostgreSQL。
services:
db:
image: postgres:16-alpine
environment:
POSTGRES_PASSWORD: devpass
POSTGRES_DB: appdb
volumes:
- pgdata:/var/lib/postgresql/data
ports:
- "5432:5432"
web:
build: .
environment:
DATABASE_URL: postgresql://postgres:devpass@db:5432/appdb
ports:
- "8000:8000"
depends_on:
- db
volumes:
pgdata:
几个容易忽略的点。第一,db 这个主机名:Compose 会为项目创建私有网络,服务名就是 DNS 名,所以 web 容器里访问数据库要写 db:5432,而不是 localhost:5432,这是新手最常见的错误。第二,数据卷 pgdata:容器文件系统是临时的,down 之后数据就没了,用命名卷持久化数据库目录,down -v 才会连卷一起清掉,开发时重置数据库就是这一条命令。第三,depends_on 只保证启动顺序,不保证服务真的可用,数据库进程起来到能接受连接还有几秒,稳妥做法是在应用里加连接重试。
日常命令其实只有四五条:docker compose up -d 后台启动、docker compose logs -f web 看日志、docker compose ps 看状态、docker compose exec web bash 进容器、docker compose down 收工。
再往前一步可以做多环境拆分:基础配置放 docker-compose.yml,开发专用端口和调试开关放 docker-compose.override.yml,Compose 会自动合并;生产用 docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d,一份代码两套形态。
最后提醒:Compose 适合单机开发和中小部署,别拿它硬扛大规模集群;但用来统一团队本地环境,它几乎没有对手,省下的正是每次「在我机器上是好的」的扯皮时间。
- 点赞
- 收藏
- 关注作者
评论(0)