用 Docker Compose 十分钟搭好一套本地开发环境

举报
yd_99838092 发表于 2026/11/02 09:09:55 2026/11/02
【摘要】 用 Docker Compose 把数据库、缓存和应用依赖写成一份声明式配置,一条命令复现本地开发环境,并整理了几个容易踩的坑。

很多项目在本地跑不起来,问题往往不在代码,而在环境:数据库大版本不一致、Redis 忘了装、依赖服务启动顺序不对,同事机器上能跑、换台电脑就报错。Docker Compose 的价值,是把这套环境写成一份声明式配置,用一条命令拉起全部依赖。


一、为什么不用一堆 docker run


用 docker run 逐个启动服务,命令又长又容易漏参数,换台机器还得重新敲一遍。Compose 把这些参数固化到 docker-compose.yml 里,配置即文档,团队成员 clone 下来就能复现同一套环境。


二、一份最小可用的配置


以一个 Web 应用加 PostgreSQL、Redis 为例,核心片段如下:


services:

  app:

    build: .

    ports:

      - "8080:8080"

    environment:

      - DATABASE_URL=postgres://dev:dev@db:5432/appdb

      - REDIS_ADDR=redis:6379

    depends_on:

      db:

        condition: service_healthy

  db:

    image: postgres:16-alpine

    environment:

      - POSTGRES_USER=dev

      - POSTGRES_PASSWORD=dev

      - POSTGRES_DB=appdb

    volumes:

      - pgdata:/var/lib/postgresql/data

    healthcheck:

      test: ["CMD-SHELL", "pg_isready -U dev -d appdb"]

      interval: 5s

      retries: 10

  redis:

    image: redis:7-alpine

    ports:

      - "6379:6379"

volumes:

  pgdata:


三、几个容易忽略的关键点


第一,容器之间用服务名通信。配置里连数据库写的是 db 而不是 localhost,因为每个容器都有自己的网络命名空间,localhost 指向容器自身。


第二,给数据库加 healthcheck。容器启动不等于服务可用,PostgreSQL 初始化需要几秒。配合 depends_on 的 service_healthy 条件,可以避免应用启动时连不上数据库而反复崩溃。


第三,数据必须落到命名卷。把数据目录挂到 pgdata 卷上,执行 docker compose down 不会丢数据,只有加 -v 参数才会连卷一起删除。


第四,环境变量不要写死。生产环境可以用 env_file 指定 .env 文件,并把 .env 加入 .gitignore,避免密码进入版本库。


四、日常命令


docker compose up -d 后台启动全部服务;docker compose ps 查看状态;docker compose logs -f app 跟踪某个服务日志;docker compose exec app sh 进入容器排查;docker compose down 停止并清理容器网络。


五、三个常见坑


端口冲突:宿主机 8080 被占用时,改成 "8081:8080",容器内部端口不用动。


构建缓存导致改动不生效:Dockerfile 里先拷贝依赖清单再拷贝源码,能最大化利用缓存;如果确实需要全量重建,用 docker compose build --no-cache。


镜像体积过大:优先选择 alpine 或 slim 基础镜像,多阶段构建只把产物复制到运行镜像,能显著减小体积和拉取时间。


六、小结


Compose 并不复杂,真正省时间的是它带来的确定性:环境可复现、依赖可声明、启动顺序可控。把这份配置纳入版本管理,新同事入职时不用再花半天配环境,一条 up 命令就能开始写业务代码。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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