docker compose的核心价值在于通过一个docker-compose.yml文件定义多容器应用,执行一条docker compose up命令即可一键启动全部服务,并自动处理网络互通、启动顺序和依赖关系。

Docker Compose 的核心价值在于:用一个 docker-compose.yml 文件描述整个应用结构,执行一条 docker compose up 命令就能启动所有关联容器,并自动处理网络互通、启动顺序和基础依赖。
服务定义:每个组件对应一个 service
在 YAML 文件中,services 是最核心的部分。每个 service 代表一个独立运行的容器,比如 Web 服务、数据库或缓存。
- 可用
image直接指定镜像(如nginx:alpine),也可用build指向本地 Dockerfile 构建 - 通过
ports映射端口(格式为"主机端口:容器端口"),让外部可访问 - 用
environment设置环境变量,支持键值对或数组写法 -
depends_on可声明启动先后关系,但注意它只控制启动顺序,不等待服务“就绪”
网络通信:容器间通过服务名自动互联
Docker Compose 默认为项目创建一个专用桥接网络,所有 service 都接入该网络。这意味着:
- Web 容器里可以直接用
http://db:5432访问数据库容器,db就是服务名 - 无需手动
docker network create或指定--network参数 - 如需自定义网络行为(如外网暴露、隔离子网),可在
networks区块中显式配置
数据持久化:用 volumes 保存关键数据
容器重启或删除后,内部文件会丢失。要保留数据库、配置或上传文件,必须使用 volumes:
- 命名卷(如
db-data:)由 Docker 管理,适合生产环境,数据独立于容器生命周期 - 绑定挂载(
./data:/app/data)将主机目录映射进容器,适合开发时快速调试 - 在 service 中通过
volumes字段挂载,支持简写(db-data:/var/lib/postgresql)或完整语法
快速上手:从写文件到运行只需两步
新建一个 docker-compose.yml,内容类似:
version: '3.8'
services:
web:
image: nginx:alpine
ports: ["80:80"]
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: example
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
然后终端进入该目录,执行:
-
docker compose up -d后台启动全部服务 -
docker compose logs -f实时查看所有容器日志 -
docker compose down彻底停止并清理(默认不删 volume)











