Docker Compose 完全入门:一键启动所有容器

想象一下:你要部署一个 Web 应用,需要 Nginx + MySQL + Redis 三个容器。

你是不是要分别写三条 docker run 命令,还要记得网络配置、端口映射、数据卷......

改一次配置,又得重新记一遍命令?

Docker Compose 就是来拯救你的! 用一个配置文件,一条命令,启动所有容器。


一、什么是 Docker Compose?📦

官方定义:

Compose 是 Docker 官方的开源项目,用于定义和运行多个 Docker 容器的应用 ,实现对容器集群的快速编排

大白话解释:

Compose 是一个 容器"总指挥"

你把所有容器的配置(用什么镜像、挂载什么目录、开放哪些端口、容器间依赖关系)写在一个 docker-compose.yml 文件里。

然后执行 docker-compose up,Compose 就会按照你的"剧本"自动把整个环境跑起来。


二、为什么需要 Compose?🤔

在没有 Compose 之前,启动一个多容器应用(比如 WordPress + MySQL)你需要:

复制代码

bash

# 创建网络
docker network create mynet

# 启动 MySQL
docker run -d --name mysql --network mynet -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

# 启动 WordPress
docker run -d --name wordpress --network mynet -p 8080:80 -e WORDPRESS_DB_HOST=mysql wordpress

  • 命令长、容易错

  • 修改配置(比如换端口)要删掉重建

  • 团队协作时,每个人都要记住这些命令

用 Compose 后:

写一个 docker-compose.yml,然后 docker-compose up -d 就全部启动。

配置文件可以放进 Git,团队每个人都能一键复现相同的环境。


三、Compose 核心概念 🧠

概念 解释 类比
服务(Service) 一个容器的配置(镜像、端口、卷等) 一个演员的角色
项目(Project) 一组服务组成的完整应用 整部戏
docker-compose.yml 描述服务关系的配置文件 剧本

一个典型的 docker-compose.yml 里可以定义多个服务,比如 webdbredis


四、实战案例:用 Compose 搭建 WordPress 博客 📝

我们用 Compose 一键部署 WordPress(含 MySQL)。

步骤 1:安装 Docker Compose

Linux 系统(以 CentOS 为例)
复制代码

bash

# 下载最新版(版本号可去官网查)
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 添加执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 检查是否安装成功
docker-compose --version

输出类似:

复制代码

docker-compose version 1.29.2, build 5becea4c

💡 Mac/Windows 用户安装 Docker Desktop 时已自带 Compose,无需额外安装。

步骤 2:创建项目目录

复制代码

bash

mkdir mywordpress
cd mywordpress

步骤 3:编写 docker-compose.yml

创建一个文件 docker-compose.yml,内容如下:

复制代码

yaml

version: '3.8'

services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: wordpress
volumes:
- db_data:/var/lib/mysql
networks:
- wpnet

wordpress:
image: wordpress:latest
restart: always
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: 123456
WORDPRESS_DB_NAME: wordpress
depends_on:
- db
volumes:
- wp_files:/var/www/html
networks:
- wpnet

volumes:
db_data:
wp_files:

networks:
wpnet:

配置解读:

  • services

    :定义两个服务 db(MySQL)和 wordpress

  • image

    :使用的镜像

  • environment

    :环境变量,相当于 -e

  • volumes

    :数据卷持久化

  • ports

    :端口映射 宿主机:容器

  • depends_on

    :启动顺序,先启动 db 再启动 wordpress

  • networks

    :自定义网络,让两个容器用容器名互相访问(如 db 主机名)

步骤 4:启动整个应用

复制代码

bash

docker-compose up -d

-d 表示后台运行。

第一次运行会拉取镜像,之后秒启。

步骤 5:访问博客

浏览器打开 http://你的服务器IP:8080,就能看到 WordPress 安装界面了!

步骤 6:常用管理命令

操作 命令
启动所有服务 docker-compose up -d
停止所有服务 docker-compose down
查看日志 docker-compose logs -f
重启某个服务 docker-compose restart wordpress
停止并删除容器、网络(保留数据卷) docker-compose down
停止并删除所有(包括数据卷) docker-compose down -v
重新构建镜像后启动 docker-compose up -d --build

步骤 7:清理环境

复制代码

bash

# 停止并删除容器、网络(数据卷还在)
docker-compose down

# 如果想要彻底删除数据卷(会丢失所有数据)
docker-compose down -v


五、Compose 文件的核心元素 🔧

一个完整的 docker-compose.yml 可以包含以下顶级元素:

元素 作用 示例
version 指定 Compose 文件格式版本 version: '3.8'
services 定义各个容器 web:db:
volumes 定义命名数据卷 db_data:
networks 定义自定义网络 frontend:

每个 service 下可以配置:

  • build

    :用 Dockerfile 构建(而不是 image

  • image

    :使用现成镜像

  • ports

    :端口映射

  • environment

    / env_file:环境变量

  • volumes

    :挂载卷或宿主机目录

  • depends_on

    :依赖其他服务

  • restart

    :重启策略(alwayson-failure


六、生产环境小贴士 ✅

  1. 不要用 latest 标签

    指定具体版本号,如 mysql:5.7,避免版本变化导致不兼容。

  2. 敏感信息用 .env 文件

    docker-compose.yml 同级创建 .env 文件:

    复制代码

    MYSQL_PASSWORD=mysecret

    然后在 docker-compose.yml 中用 ${MYSQL_PASSWORD} 引用。

  3. 日志大小限制

    在服务下添加:

    复制代码

    yaml
    logging:
    driver: "json-file"
    options:
    max-size: "10m"
    max-file: "3"

  4. 指定容器重启策略

    restart: always 保证服务器重启后容器自动恢复。


七、总结:Compose 带来的改变 🎯

没有 Compose 有了 Compose
多条 docker run 命令 一个 docker-compose.yml 文件
手动创建网络、数据卷 自动创建
容易忘参数,难以复用 配置文件可版本控制
团队环境不一致 一键复现相同环境

一句话记住 Compose:

把"多容器应用"当作一个整体来管理。

相关推荐
小啊曼2 小时前
CIO实战方法论_11_组织变革打破部门墙
运维
❀搜不到2 小时前
远程服务器codex使用本地cc-switch的deepseek api
运维·服务器
虾壳云官方3 小时前
OpenClaw 2.7.9 Windows 一键部署教程:零基础也能搭建 AI 自动化助手
运维·人工智能·windows·自动化·openclaw·openclaw一键部署
江南风月3 小时前
WGCLOUD保姆级教程最新版整理
运维·zabbix·运维开发·prometheus·日志审计
志栋智能3 小时前
超自动化巡检:知识沉淀与团队协作的新载体
大数据·运维·网络·数据库·人工智能·自动化
vsropy4 小时前
Ubuntu网络图标消失问题/有网络问号
linux·运维·ubuntu
fofantasy4 小时前
NSK LH12AN 微型导轨技术手册
运维·网络·数据库·经验分享·规格说明书
coderwu5 小时前
Ubuntu 24.04 终端输入 openclaw config 提示未找到命令解决办法
linux·运维·ubuntu
dxxt_yy5 小时前
千兆光/电口+OTDR一体——成都鼎讯 SZT-1000A 千兆以太网测试仪助力风电能源光缆管理
运维·服务器·能源