Docker Compose 2026年七个实用技巧,有些你可能不知道

王尘宇 实用技巧 2

用Docker Compose管理开发环境快五年了,分享几个我日常高频使用的技巧。不是入门教程,是那些用了以后"怎么没早点知道"的东西。

1. include:拆分巨大的compose文件

Docker Compose 2.20开始支持include指令。如果你有一个大项目,几十个service全塞在一个docker-compose.yml里,滚动起来像看小说。现在可以拆成多个文件:

# docker-compose.yml
include:
  - compose/database.yml
  - compose/cache.yml
  - compose/app.yml

每个子文件里定义相关的service。结构干净了,团队里不同的人改不同部分也不会冲突。2026年这个功能已经稳定,可以放心用。

2. profiles:按需启动服务

不是每次开发都需要所有服务。用profiles控制哪些服务一起启动:

services:
  worker:
    profiles: ["background"]
  elasticsearch:
    profiles: ["search", "background"]

日常开发只需要docker compose up(启动没有profile的服务),需要后台任务时加--profile background。比手动启停容器优雅得多。我一般把核心服务(数据库、Redis、应用)设为无profile默认启动,可选的(ES、队列worker、邮件测试工具)加profile。

3. watch:代码改了自动同步

Compose 2.22新增了watch模式,替代手动bind mount+重启。配置示例:

services:
  app:
    develop:
      watch:
        - action: sync
          path: ./src
          target: /app/src
        - action: rebuild
          path: package.json

改源码→自动sync到容器(不重启);改依赖配置→自动rebuild。比nodemon或webpack-dev-server可靠,因为它是在容器层面管理的。用了一个月,最大的感受是开发体验平滑了——不再需要手动重启容器。

4. env_file可以有多个

一个env_file可以指向多个文件,后面文件的变量会覆盖前面的:

env_file:
  - .env.base
  - .env.${ENVIRONMENT:-dev}
  - .env.local  # gitignore的,存本地覆盖

团队里每个人都有自己的.env.local,放个人API key和调试开关。不会互相踩。

5. healthcheck + depends_on condition

旧版的depends_on只等容器启动了,不等服务就绪。新版(Compose 2.21+)支持condition: service_healthy

depends_on:
  postgres:
    condition: service_healthy

前提是postgres服务定义了healthcheck(比如用pg_isready)。app容器会等到数据库真正能接受连接了才启动。再也不用在entrypoint脚本里写sleep 10了。

6. init: true 避免僵尸进程

容器里的PID 1如果不处理子进程退出信号,会留下僵尸进程。加一行init: true,Compose会用tini作为init进程:

services:
  app:
    init: true

特别适合Node.js或Python应用,它们自己不处理SIGCHLD。2026年很多官方镜像默认开了init,但自定义镜像还是得手动加。

7. networks里的name字段

如果多个compose项目需要共享网络,自定义网络名称:

networks:
  shared:
    name: my-shared-network
    external: false

不加name的话,Compose会自动加项目名前缀。加name以后,另一个项目可以直接用同一个网络名。微服务本地开发必备。

最后提醒一点:Docker Compose的版本号概念(version: '3.8')在2026年已经彻底废弃了。新的compose文件不需要声明version。如果你还在老文件里写version: '3',现在可以删掉——什么都不会坏。

标签: Docker Docker Compose 实用技巧 DevOps 开发工具

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~