Docker Compose 是通过 docker-compose.yml 文件定义和管理多容器应用的工具;它以 service 为单位描述每个容器的镜像、端口、环境变量、volumes、depends_on 等配置,自动创建网络实现服务间通信,并支持一键启停(docker compose up/down)、日志查看(logs)和状态监控(ps)。
用 yaml 文件管理多个服务,核心是把每个容器定义成一个 service,再通过 docker-compose.yml(或 compose.yaml)统一描述它们的镜像、网络、存储、依赖等关系。启动、停止、日志全靠一条命令,不用逐个 docker run。
服务定义要写清楚镜像和运行参数
每个服务块至少得指定 image 或 build,否则不知道跑什么。端口、环境变量、挂载目录这些按需加:
-
image: nginx:alpine直接拉取现成镜像 -
build: ./backend表示从本地 Dockerfile 构建 -
ports: ["8080:80"]把容器内 80 映射到主机 8080 -
environment:下写键值对,比如DB_HOST: postgres -
volumes:挂载宿主机路径或命名卷,避免容器重启丢数据
容器之间要能互相访问就得配网络
默认 Compose 会为整个项目创建一个桥接网络,所有服务自动加入。只要用服务名当主机名就能通信:
- 比如
app服务里连数据库,MYSQL_HOST: db就行(db是另一个服务名) - 不加自定义
networks也能通,但显式声明更清晰,也方便隔离不同项目 - 若需外部访问某服务,除了
ports,还要确认防火墙或云服务器安全组放行对应端口
控制启动顺序和数据持久化很关键
有些服务必须等别的先起来(比如 Web 要等 DB),有些数据不能随容器消失:
-
depends_on:声明依赖,如- db,只保证启动先后,不检查 DB 是否“就绪”(要等 MySQL 启动完成,还得配合健康检查或重试逻辑) - 数据库类服务务必配
volumes,例如db-data:/var/lib/mysql,再在volumes:区域定义这个命名卷 - 静态文件、上传目录、配置文件这类也建议挂载,方便备份和修改
常用操作都基于这个 yaml 文件
文件写好后,所有管理动作都在同一目录下执行:
-
docker compose up启动全部服务(加-d后台运行) -
docker compose down停止并清理容器、网络(默认不删卷,数据还在) -
docker compose logs -f app实时看某个服务日志 -
docker compose ps查当前运行状态,包括端口映射和健康状态


















