Compose 编排实操

02 篇讲清了"Docker vs Compose 是什么关系"(单容器工具 vs 多容器编排),本篇动手把它用起来。学完你会发现:Compose 就是一份 yaml 说明书 + 一个把说明书变成现实的命令——而它正是再次出发组所有服务的实际运行形态。

一、从三条 docker run 到一份 yaml

假设要跑"网站 + 数据库",散装写法:

docker network create site
docker run -d --name db  --network site-net -e MYSQL_ROOT_PASSWORD=secret -v dbdata:/var/lib/mysql mysql:8
docker run -d --name web --network site-net -p 8080:80 -v /root/docker_data/web:/usr/share/nginx/html nginx

命令长了难维护、重启顺序靠人脑、换服务器要重敲一遍。换成 Compose,把同样的信息写进 compose.yaml

services:
  web:
    image: nginx
    container_name: web
    ports:
      - "8080:80"
    volumes:
      - /root/docker_data/web:/usr/share/nginx/html
    depends_on:
      - db
    restart: unless-stopped

  db:
    image: mysql:8
    container_name: db
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - dbdata:/var/lib/mysql

volumes:
  dbdata:

字段对照(全部来自前几篇的散装知识):

yaml 字段 对应的 docker 概念
image run 的镜像名
ports -p 端口映射
volumes -v 数据卷(顶层 volumes: 声明的是命名卷)
environment -e 环境变量
depends_on 启动顺序(db 先于 web 起)
restart: unless-stopped 崩溃/开机自愈(生产必配)

一个文件读下来就是整套部署方案——配置即文档

二、四个命令走天下

docker compose up -d      # 一键拉起全部服务(自动建网络+卷,缺镜像自动 pull)
docker compose ps         # 本组容器状态
docker compose logs -f    # 全组日志
docker compose down       # 全组拆除(容器+网络;加 -v 连卷一起删,慎用)

改了 yaml 之后怎么办?再跑一遍 up -d——Compose 会对比差异,只重建变了的服务。停某单个服务:docker compose stop web(范围限定在本组)。

💡v1 与 v2 的写法

老教程里是 docker-compose(带横线,v1 独立程序);现在推荐 docker compose(空格,v2 是 Docker 插件,随 Docker 一起装)。两者命令几乎一致,遇到 docker-compose: command not found 就换空格写法。再次出发组两种写法都出现过,就是这段历史。

三、depends_on 只管"先起",不管"就绪"

一个高频坑:depends_on 保证 db 容器启动在 web 之前,但 MySQL 启动到能接受连接需要几秒到几十秒——web 可能已经连不上数据库崩了。应对方式:

  1. 应用层加重试(最常见);
  2. Compose 的 healthcheck + condition: service_healthy(v2.20+ 写法,细节用时再查)。

知道有这个坑,报 connection refused 时先怀疑时序,别急着重启。

四、闭环:Dockge 就是 Compose 的可视化

再次出发组 极简三剑客 里强推的 Dockge,本质就是这份 yaml 的可视化编辑器/opt/stacks 里一个文件夹一个服务,每个文件夹里躺着一篇 compose.yaml——在 Dockge 网页上点"部署",等于在对应目录跑 docker compose up -d;"打包带走换服务器",就是把这个文件夹拷走。

学到这里,回头看完整指南里每个服务的部署片段(image/ports/volumes/restart),应该全部能自己读懂了。

五、自查清单

学完 Compose,用这份清单验收:

  • 能手写一个含 ports/volumes/environment 的 compose.yaml
  • 知道改完 yaml 用 up -d 重建而不是 down 再 up
  • 知道 downdown -v 的区别(数据在不在)
  • 知道容器互联靠服务名,不查 IP
  • 知道 Dockge 与 compose.yaml 的对应关系

概念、命令、镜像构建、数据网络、编排五篇全部就位,最后看两个把它们串起来的完整实战——在 Docker 里部署在线编译器并挂到公网:docker 部署网页编译器


⬅️ 数据卷与网络 🏠 00-网络与项目 ➡️ docker部署网页编译器