Docker Compose 实战教程
vps
Docker Compose 实战教程

Docker Compose 是一个用于定义和运行多容器应用的工具

Docker Compose 实战教程

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

本期将从零开始介绍 Docker Compose:理解核心概念、学会编写 compose.yml、掌握常用命令,并通过三个典型场景展示如何真正“把它用起来”。


什么是 Docker Compose?

Docker Compose 是一个用于定义和运行多容器应用的工具。你只需要在一个 YAML(DevOps 世界的“共同语言”: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 都是一项必须掌握的技能。

暂无评论

相关导航