第十一篇:《Docker Compose:多容器应用编排入门》

现实中的应用往往不是单个容器,而是多个服务协同工作:Web 前端、后端 API、数据库、缓存、消息队列......手动逐个启动容器并配置网络非常繁琐。Docker Compose 通过一个声明式的 YAML 文件,让你一键启动整个应用栈。本文将带你从零开始,编写第一个 docker-compose.yml,掌握常用命令,并运行一个完整的 LAMP 示例。

一、什么是 Docker Compose?

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。你只需在 YAML 文件中配置应用的服务、网络和卷,然后一条命令就能启动所有服务。

核心价值:

简化多容器管理:无需记忆复杂的 docker run 参数。

环境一致性:开发、测试、生产使用相同的 Compose 配置。

支持依赖启动顺序(depends_on)。

快速复制和共享:docker-compose.yml 可以提交到 Git。

二、安装 Docker Compose

Docker Compose 已集成在 Docker Desktop(Windows / Mac)中,无需单独安装。Linux 用户需单独安装:

bash 复制代码
# 下载最新版(替换版本号)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/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 也可作为 Docker 插件使用:docker compose(无横线)。下文使用 docker-compose 命令,但推荐迁移到 docker compose。

三、第一个 Compose 文件:Web + Redis

创建一个新目录 compose-demo,新建 docker-compose.yml:

yaml 复制代码
version: '3.8'

services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    restart: always

  redis:
    image: redis:alpine
    restart: always

解释:

version:Compose 文件格式版本(3.x 用于 Swarm,建议 3.8)。

services:定义容器,每个服务对应一个容器。

web:使用 Nginx 镜像,映射宿主机 8080 端口,挂载本地 ./html 目录。

redis:使用 Redis 镜像。

启动:

bash 复制代码
# 创建 ./html/index.html
echo "<h1>Hello Compose</h1>" > ./html/index.html

# 启动所有服务(后台运行)
docker-compose up -d

# 查看状态
docker-compose ps

# 访问 http://localhost:8080

停止并清理:

bash 复制代码
docker-compose down

四、核心命令详解

五、一个更完整的示例:WordPress + MySQL

yaml 复制代码
version: '3.8'

services:
  db:
    image: mysql:8.0
    container_name: wordpress_db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    volumes:
      - db_data:/var/lib/mysql

  wordpress:
    image: wordpress:latest
    container_name: wordpress_app
    restart: always
    ports:
      - "8000:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
    depends_on:
      - db
    volumes:
      - wordpress_data:/var/www/html

volumes:
  db_data:
  wordpress_data:

关键点:

environment:设置容器环境变量(MySQL 密码、数据库名等)。

volumes:使用命名卷持久化数据,保证容器删除后数据不丢。

depends_on:声明启动顺序(先 db 后 wordpress),但不会等待 db 完全就绪(需健康检查)。

启动后访问 http://localhost:8000 即可进入 WordPress 安装页面。

六、服务间通信

在 Compose 中,服务之间可以通过服务名作为主机名进行通信。上面的例子中,WordPress 通过 WORDPRESS_DB_HOST=db:3306 连接到 MySQL 容器。

这是因为 Compose 会自动创建一个默认网络(<目录名>_default),并将所有服务加入该网络,并支持 DNS 解析。

七、常用配置字段速查

八、小结

Docker Compose 是多容器应用的得力助手。通过一个 YAML 文件,你可以完整描述应用的所有服务、网络和存储。掌握 docker-compose up/down 等基本命令,你已经能够快速搭建开发环境。

相关推荐
FBI HackerHarry浩1 小时前
在Python中TCP网络程序开发的步骤流程
运维·服务器·开发语言·网络·python·pycharm
Geoking.1 小时前
Docker安装Nacos指南
运维·docker·容器
梦仔生信进阶1 小时前
【本地数据传服务器命令】小文件Xftp,大文件用它更高效!
运维·服务器
“码”力全开1 小时前
解耦品牌壁垒:基于 Docker 与边缘计算的高并发视频中台架构(支持 GB28181/RTSP 统一接入与源码交付)
docker·音视频·边缘计算
wanhengidc1 小时前
服务器 数据恢复
运维·服务器·网络·智能手机·云计算
木卫二号Coding1 小时前
第八十五篇-CentOS-7 + Tesla V100 环境下 Docker 容器内编译部署 Qwen3.6-27B-MTP 大模型实战指南
linux·docker·centos
Irene19911 小时前
Win11 安装 Docker Desktop 并配置 WSL 使用 Hbase
docker·hbase
dongdonglele5211 小时前
ubuntu 系统x86 架构安装docker,可以使用本地显卡
ubuntu·docker·架构
日取其半万世不竭1 小时前
密码管理工具私有化部署,Vaultwarden 备份恢复怎么做?
数据库·docker·容器