用 Docker Compose 一个文件搭起本地开发环境

举报
yd_214121775 发表于 2026/10/30 18:40:47 2026/10/30
【摘要】 很多同学第一次接触 Docker,都是在终端里手敲 docker run,一条条把数据库、缓存、后端服务拉起来。命令越堆越长,端口记不住,换个机器又要重新回忆一遍。其实只要一个 docker-compose.yml,就能把这些零散命令收进一个文件,一条 docker compose up 全部启动。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 适合单机开发和中小部署,别拿它硬扛大规模集群;但用来统一团队本地环境,它几乎没有对手,省下的正是每次「在我机器上是好的」的扯皮时间。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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