Docker Compose 一键搭起本地开发环境:一次写好,到处能跑

举报
yd_211833921 发表于 2026/11/04 04:24:42 2026/11/04
【摘要】 本地开发最常见的浪费,不是写代码,而是搭环境:同事机器上能跑,自己的机器上数据库连不上;换一台电脑,又要重装依赖、重配端口。Docker Compose 就是为此而生的:把应用、数据库、缓存写进一个 docker-compose.yml,一条命令拉起整套环境,而且每个人的环境都来自同一份定义。 docker-compose.yml 的基本结构Compose 的核心是 services,每个服...

本地开发最常见的浪费,不是写代码,而是搭环境:同事机器上能跑,自己的机器上数据库连不上;换一台电脑,又要重装依赖、重配端口。Docker Compose 就是为此而生的:把应用、数据库、缓存写进一个 docker-compose.yml,一条命令拉起整套环境,而且每个人的环境都来自同一份定义。

docker-compose.yml 的基本结构

Compose 的核心是 services,每个服务对应一个容器。常用字段只有几个:image 指定镜像,build 用本地 Dockerfile 构建,ports 做端口映射,environment 注入环境变量,volumes 挂载数据卷,depends_on 声明启动依赖。读懂这几个字段,就能读懂绝大多数 Compose 文件。

services:
  web:
    build: .
    ports: ["3000:3000"]
    environment:
      - DATABASE_URL=postgres://dev:dev@db:5432/appdb
    volumes: [.:/app]
    depends_on: [db, cache]
  db:
    image: postgres:16
    volumes: [pgdata:/var/lib/postgresql/data]
  cache:
    image: redis:7
volumes: { pgdata: {} }

服务之间用服务名互访,web 用 db 当数据库主机名,不用写 localhost;端口写成“宿主机端口:容器端口”;命名卷 pgdata 让数据库数据在容器删除后依然保留。

常用命令

docker compose up -d 后台启动全部服务;docker compose ps 查看服务状态;docker compose logs -f web 实时看某个服务的日志,排障最常用;docker compose down 停止并删除容器和网络,默认保留数据卷;docker compose down -v 则连数据卷一起删,只在确实想清空数据时用。改解释型代码配合目录挂载一般不用重启,改 Dockerfile 或依赖才需重新构建。

多服务编排与数据卷

编排的关键是职责分清:应用管业务,数据库管存储,缓存管加速。服务间走内部网络,对外只暴露真正需要的端口,例如只暴露应用端口,不把数据库端口映射到宿主机,既安全又少端口冲突。数据卷分两种:命名卷适合数据库这类需持久化、无需直接编辑的数据;绑定挂载适合把本地代码目录挂进容器,改代码即生效。两者常配合使用。

一个实用的开发环境示例

做前后端分离项目时,Compose 里放前端、后端、Postgres 和 Redis 四个服务:前端走 5173,后端走 3000,数据库和缓存只在内部网络可见。新同事不用再按文档一步步装数据库和缓存,装好 Docker 后执行 docker compose up -d,用 ps 确认状态即可开工;调试看 logs -f,收尾用 down,干净利落。

容易踩的坑

一是镜像写固定标签,如 postgres:16,别长期用 latest,否则不同时间拉到的版本可能不一致;二是密码密钥别写进文件提交仓库,改用 .env 注入;三是端口占用先查旧容器是否还在运行;四是 depends_on 只保证启动顺序,不保证数据库已就绪,应用最好自带重连或健康检查。一次写好,到处能跑,这正是本地开发最值得做的一次性投入。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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