Docker Compose 实战教程,理解Docker Compose核心概念,学会编写 compose.yml,掌握常用命令!

在容器化已成主流的今天,大部分人可能已经熟悉 Docker,但当需要同时管理多个容器、配置复杂参数、保证可重复部署时,Docker Compose 才是提升效率的关键武器。

理解 Docker Compose核心概念、学会编写 compose.yml、掌握常用命令,并通过三个典型场景展示如何真正"把它用起来"。


什么是 Docker Compose?

Docker Compose 是一个用于定义和运行多容器应用的工具。你只需要在一个 YAML 文件中描述:

  • 有哪些容器?

  • 每个容器如何构建?

  • 需要哪些端口、环境变量、卷?

  • 它们之间如何互联?

然后一条命令:

复制代码
docker compose up -d

多容器环境瞬间启动!实现环境配置的真正"一键重现"。


为什么要使用 Docker Compose?

功能 单独执行 docker Docker Compose
启动多个容器 繁琐重复 一个命令统一管理
环境变量 需要手动传递 YAML 结构化配置
网络互通 需要手动创建网络 自动创建默认网络
卷管理 手动 -v 挂载 声明式配置
项目迁移 复杂 拷贝配置即可部署

Docker Compose = 可复制、可维护、多容器协作的最佳实践。


Docker Compose 文件结构详解

Docker Compose 采用 compose.yml 文件,一般包含这些核心部分:

复制代码
version: "3.9"
services:
  web:
    image: nginx:1.27
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
    volumes:
      - dbdata:/var/lib/mysql

volumes:
  dbdata:

关键配置说明

字段 作用
services 定义每个容器服务
image 指定要运行的镜像
build 从本地 Dockerfile 构建镜像
ports 宿主机与容器的端口映射
volumes 数据持久化或挂载目录
environment 环境变量
depends_on 设置服务启动顺序
networks 配置容器网络

常用 Docker Compose 命令

启动 / 停止相关命令

复制代码
docker compose up
  • 会创建容器

  • 创建网络

  • 创建卷

  • 启动所有服务

常用参数:
  • -d # 后台运行(最常用)

  • --build # 重新构建镜像

作用:

启动所有服务

使用场景:
  • 启动整个项目

  • 重启开发环境

  • 部署生产服务


复制代码
docker compose down
常用参数:
  • -v # 删除 volume

  • --rmi all # 删除所有镜像

作用:

停止所有服务并删除容器、网络

使用场景:
  • 清理整个项目

  • 测试环境重复部署

  • 重置开发环境


复制代码
docker compose stop
docker compose start
  • stop:停止容器,但不删除

  • start:仅启动已有容器

使用场景:

维护容器但不删除数据时


复制代码
docker compose restart
使用场景:

修改配置后快速重启服务


查看容器状态 / 日志

复制代码
docker compose ps
作用:

查看当前 compose 项目所有容器状态(相当于 docker ps 的 compose 版本)


复制代码
docker compose logs
常用参数:
  • -f # 实时查看日志

  • service-name # 查看某个服务日志

使用场景:
  • 调试容器是否启动成功

  • 查看项目运行状态


构建镜像 / 拉取镜像

复制代码
docker compose build
常用参数:
  • --no-cache # 不使用缓存

  • --quiet # 静默输出

使用场景:
  • 修改 Dockerfile 后重新构建

  • 不用 docker build,全通过 compose 管理


复制代码
docker compose pull
场景:
  • 更新所有服务镜像

  • CI/CD 自动部署前


复制代码
docker compose push
场景:

推送镜像到镜像仓库(CI/CD 使用)


进入容器 / 执行命令

复制代码
docker compose exec SERVICE bash
场景:
  • 进入某个容器的终端(首选方式)

  • 调试应用、运行命令

前提:容器正在运行


复制代码
docker compose run SERVICE bash

与 exec 区别:

命令 作用
exec 正在运行的容器里执行
run 创建一个新容器 并执行命令

使用场景:

  • 只想临时跑一个命令,不需要现有容器

  • 数据迁移、数据库初始化脚本


查看项目文件 / 配置信息

复制代码
docker compose config
场景:
  • 检查 compose 文件是否语法正确

  • 查看变量替换结果(env 文件)

  • 调试 compose 配置时非常有用

性能相关:扩容 / 缩容

复制代码
docker compose up --scale web=3 -d
作用:

扩容某个服务实例数量(比如 web 服务扩成 3 个实例)

场景:
  • 微服务自动扩容

  • 高并发 test 环境


清理资源

复制代码
docker compose rm
场景:
  • • 删除已经停止的容器

  • • 保留 volume 和 network


复制代码
docker compose down -v
场景:
  • 删除所有数据卷(会丢数据)

  • 开发测试环境重置


所有常用命令总结表(速查版)

命令 作用
docker compose attach 将本地标准输入/输出/错误流附加到正在运行的服务容器
docker compose build 构建或重新构建服务
docker compose commit 将服务容器的更改创建为新的镜像
docker compose config 解析、合并并以规范格式输出 Compose 配置
docker compose cp 在服务容器和本地主机之间复制文件/文件夹
docker compose create 为服务创建容器但不启动
docker compose down 停止并删除容器、网络(可选卷/镜像)
docker compose events 接收容器的实时事件流
docker compose exec 在运行中的容器内执行命令
docker compose export 将服务容器的文件系统导出为 tar 包
docker compose images 列出由 Compose 创建的容器所使用的镜像
docker compose kill 强制停止服务容器
docker compose logs 查看服务容器日志
docker compose ls 列出正在运行的 Compose 项目
docker compose pause 暂停服务
docker compose port 查看服务端口的映射关系
docker compose ps 列出容器
docker compose publish 发布 Compose 应用
docker compose pull 拉取服务镜像
docker compose push 推送服务镜像
docker compose restart 重启服务容器
docker compose rm 删除已停止的服务容器
docker compose run 在服务上运行一次性命令(创建新容器)
docker compose scale 为服务扩容或缩容
docker compose start 启动已创建但未运行的容器
docker compose stats 显示容器资源使用情况(类似 top)
docker compose stop 停止服务
docker compose top 显示容器中的运行进程
docker compose unpause 取消暂停服务
docker compose up 创建并启动容器
docker compose version 显示 Docker Compose 版本信息
docker compose volumes 列出卷
docker compose wait 阻塞直到服务容器退出
docker compose watch 监听构建上下文变化,自动重建/刷新容器

实战场景 1:Nginx + PHP-FPM(经典 LNMP)

适用于本地开发、测试环境。

复制代码
version: "3.9"

services:
  nginx:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./code:/var/www/html
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php

  php:
    image: php:8.3-fpm
    volumes:
      - ./code:/var/www/html

启动:

复制代码
docker compose up -d

浏览器访问:

复制代码
http://localhost:8080

实战场景 2:WordPress 一键部署(含 MySQL)

复制代码
version: '3.9'

services:
  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
    volumes:
      - db_data:/var/lib/mysql

  wordpress:
    image: wordpress:latest
    ports:
      - "8081:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: 0MlbIYOLn2VB1JEeLlvE
    depends_on:
      - db

volumes:
  db_data:

访问:

复制代码
http://localhost:8081

真正实现 3 分钟上线一个博客系统


实战场景 3:部署带后端的前后端项目

目录结构:

复制代码
project/
  frontend/
  backend/
  compose.yml

compose.yml:

复制代码
version: "3.9"

services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    depends_on:
      - backend

  backend:
    build: ./backend
    environment:
      DB_HOST: mysql
    ports:
      - "8000:8000"

  mysql:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - db:/var/lib/mysql

volumes:
  db:

开发者只需要命令:

复制代码
docker compose up -d --build

即可快速进入开发。


Docker Compose 最佳实践

使用 .env 管理敏感变量

在同级目录创建 .env

复制代码
MYSQL_PASSWORD=123456

compose.yml 使用:

复制代码
environment:
  MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD}

使用 profiles 管理不同环境

复制代码
services:
  redis:
    image: redis
    profiles: ["dev"]

开发启动:

复制代码
docker compose --profile dev up -d

使用 healthcheck 提升稳定性

复制代码
healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost:80"]
  interval: 30s
  retries: 3

写在最后

早期使用的 docker-compose 命令,需要单独安装,在 2020 年之后官方逐步停止更新,并建议迁移到新版。新的命令不需要单独安装,只要安装 Docker Desktop 或新版本 Docker 即可,命令格式得到统一。

命令 来源 是否推荐 备注
docker-compose 旧版,独立 Python 程序 ❌ 不推荐(旧) 二进制文件或 Python 脚本
docker compose 新版,集成在 Docker CLI ✅ 推荐(新) 不需要单独安装 compose

Docker Compose = 开发与部署的生产力加速器,通过一个 compose.yml 文件即可:

  • 定义整个应用环境

  • 保证环境一致性

  • 一键启动/停止多容器服务

  • 快速迁移与重建

  • 简化团队协作

无论你是做开发、运维、DevOps 或自建服务,Compose 都是一项必须掌握的技能。

相关推荐
今晚务必早点睡2 小时前
Redis——快速入门第六课:Redis 运维 & 排错实战
运维·redis·bootstrap
原神启动12 小时前
Docker(二)—— Docker容器操作
运维·docker·容器
你什么冠军?2 小时前
Docker
运维·容器
梦想的旅途22 小时前
RVA与基址偏移在自动化执行中的稳定性研究
运维·自动化·企业微信·rpa
呼啦啦呼啦啦啦啦啦啦2 小时前
推送docker镜像至私有 Docker 镜像仓库(附企业harbor实战)
运维·docker·容器
m0_485614672 小时前
Docker基础
docker·容器·php
二等饼干~za8986682 小时前
碰一碰发视频系统源码开发搭建--技术分享
java·运维·服务器·重构·django·php·音视频
爱学大树锯2 小时前
【Docker本地化超级实践】Docker 镜像离线构建方案
运维·docker·容器
熙丫 133814823862 小时前
CISAW-RM风险管理认证培训|2026年度课程计划全面发布:筑牢安全防线
运维·安全