news 2026/2/16 9:56:18

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 都是一项必须掌握的技能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/12 6:08:54

解锁科研“开题秘籍”:书匠策AI开题报告功能,开启学术探索新征程

在科研的浩瀚宇宙中,开题报告宛如一颗启明星,为整个研究项目指引方向。它不仅是研究者向学术界展示研究计划的重要窗口,更是确保研究具有科学性、创新性和可行性的关键环节。然而,撰写一份高质量的开题报告并非易事,从…

作者头像 李华
网站建设 2026/2/15 3:22:27

安全多方计算获分布式计算最高荣誉,探索隐私保护核心机制

安全多方计算:在保护隐私的前提下协同计算 安全多方计算(MPC)是一种计算范式,允许多个参与方在不泄露任何私人信息的情况下共同计算一个聚合函数[citation:5]。例如,多方可以在不透露各自具体薪资的情况下,…

作者头像 李华
网站建设 2026/2/8 10:31:06

科研开题的“智慧锦囊”:书匠策AI开题报告功能,解锁学术新姿势

在科研这片广袤无垠的天地里,每一位科研工作者都怀揣着探索未知、追求真理的梦想。而开题报告,就像是这场逐梦之旅的“导航图”,为我们清晰地勾勒出研究的方向、目标与路径。然而,撰写一份高质量的开题报告,却绝非易事…

作者头像 李华
网站建设 2026/2/10 16:29:59

揭秘Open-AutoGLM访问风控系统:5步构建高效异常行为识别模型

第一章:Open-AutoGLM 访问行为异常预警 在大规模语言模型服务部署中,Open-AutoGLM 作为核心推理引擎,其访问行为的稳定性直接关系到系统安全与服务质量。为及时发现潜在攻击或异常调用模式,需建立一套实时监控与预警机制。 异常检…

作者头像 李华
网站建设 2026/2/13 2:41:48

配置效率提升80%,Open-AutoGLM访问监控你必须掌握的7个关键点

第一章:Open-AutoGLM异常访问监控配置概述Open-AutoGLM 是一款基于开源大语言模型的自动化推理网关,广泛应用于企业级 AI 服务调度与响应优化。在高并发场景下,保障系统安全与稳定性至关重要,因此异常访问行为的实时监控成为核心运…

作者头像 李华
网站建设 2026/2/15 3:01:21

还在裸奔存储日志?Open-AutoGLM加密方案必须马上落地的3个理由

第一章:还在裸奔存储日志?Open-AutoGLM加密方案必须马上落地的3个理由在现代分布式系统中,日志数据不仅记录了关键的运行状态,还可能包含敏感信息。然而,许多企业仍在以明文形式存储日志,这无异于“裸奔”。…

作者头像 李华