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

相关推荐
SelectDB9 小时前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
曲幽16 小时前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
XIAOHEZIcode2 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220702 天前
如何搭建本地yum源(上)
运维
武子康2 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树885 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠5 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质5 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工5 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn865 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker