Docker Compose 本地开发环境:5 个让新手少走弯路的实战技巧
本地开发最烦的事,莫过于“在我机器上明明是好的”。装 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,环境原样回来。
- 点赞
- 收藏
- 关注作者
评论(0)