Docker Compose 本地开发环境:5 个让新手少走弯路的实战技巧

举报
yd_282084356 发表于 2026/10/23 08:31:27 2026/10/23
【摘要】 本地开发最烦的事,莫过于“在我机器上明明是好的”。装 MySQL、Redis、Nginx……每个服务都要配端口、配账号,重装系统就得再来一遍。Docker Compose 就是为解决这个问题而生的:一个 docker-compose.yml,把整套依赖声明清楚,谁来都能一键起。下面 5 个技巧,是我自己从踩坑里总结出来的,适合刚上手的同学。 一、用 .env 管端口和密码,别硬编码新手最容易...

本地开发最烦的事,莫过于“在我机器上明明是好的”。装 MySQL、Redis、Nginx……每个服务都要配端口、配账号,重装系统就得再来一遍。Docker Compose 就是为解决这个问题而生的:一个 docker-compose.yml,把整套依赖声明清楚,谁来都能一键起。

下面 5 个技巧,是我自己从踩坑里总结出来的,适合刚上手的同学。

一、用 .env 管端口和密码,别硬编码

新手最容易把密码直接写在 yml 里,比如 MYSQL_ROOT_PASSWORD: 123456。换个环境、换台机器,或者想把文件分享给同事,就尴尬了。

做法:在 compose 文件同目录建一个 .env 文件,里面写:

DB_PASSWORD=换成你自己的强密码
APP_PORT=8080

yml 里用 ${DB_PASSWORD} 引用。Docker Compose 会自动读取 .env。记得把 .env 加进 .gitignore,密码就不会进仓库。

二、volumes 挂载源码,改代码不用重 build

很多人把代码 COPY 进镜像,改一行代码就得重新 build,慢得离谱。本地开发的正确姿势是把宿主机源码目录挂载进容器:

volumes:
  - ./src:/app

代码在宿主机用你熟悉的编辑器改,容器里实时生效。配合 nodemon、uvicorn --reload 这类热重载,保存即生效。注意 node_modules 这类目录可以用匿名卷排除,避免宿主机和容器的依赖打架。

三、depends_on 加 healthcheck,告别“库还没好应用就崩”

应用容器经常比数据库启动得快,结果连不上库直接退出。depends_on 只能保证启动顺序,不保证服务可用。正确做法是给数据库加 healthcheck:

healthcheck:
  test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
  interval: 5s
  timeout: 3s
  retries: 10

应用侧用 depends_on 的 condition: service_healthy,数据库真正可用了才起应用,日志干净一大半。

四、用 profiles 区分“只起数据库”和“全量启动”

有时候你只想起个 MySQL 调接口,不想把前端、消息队列全拉起来。给不常用的服务加 profiles:

profiles: ["full"]

默认 docker compose up 只起没有 profiles 的服务;需要全量时加 --profile full。这样一台 8G 内存的笔记本也能从容应对。

五、动手前先 docker compose config 校验

yml 写错一个缩进,compose 的报错经常让人摸不着头脑。改完 yml 先跑:

docker compose config

它会把变量替换、文件合并后的最终配置打印出来,错在哪一目了然。建议写进自己的检查清单,每次改完都跑一遍。

一个最小可用的模板

services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
    volumes:
      - db-data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 5s
      retries: 10
  app:
    build: .
    ports:
      - "${APP_PORT}:8080"
    volumes:
      - ./src:/app
    depends_on:
      db:
        condition: service_healthy
volumes:
  db-data:

从这 5 个技巧开始,你的本地环境就从“玄学”变成了“工程”。下次换电脑,一条 docker compose up,环境原样回来。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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