第十一篇:《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 等基本命令,你已经能够快速搭建开发环境。

相关推荐
一叶龙洲8 小时前
win11与Ubuntu之间同步配置、插件
linux·运维·ubuntu
CHANG_THE_WORLD9 小时前
12.总结:深入理解 Linux I/O 多路复用:select、poll、epoll 全解析
linux·运维·服务器
风曦Kisaki9 小时前
# Linux笔记:操作系统优化与资源管理
linux·运维·服务器·笔记
关关长语11 小时前
Wsl解决MySQL容器跨域权限问题
mysql·docker·容器
zhangrelay11 小时前
笔记本轻量高品质延寿工具完整分系统清单
运维·笔记·学习
RisunJan13 小时前
Linux命令-screen(终端复用器)
linux·运维
啊哦11113 小时前
安装VMware Workstation
linux·运维·服务器
持敬chijing13 小时前
Linux基础命令与目录命令
linux·运维·服务器
IT小辉同学13 小时前
# Milvus v3.0-beta docker-compose 启动失败完整排错教程
docker·eureka·milvus
小张成长计划..14 小时前
【Linux】12:进程状态
linux·运维·服务器