Docker Compose 一键部署多容器应用

用一个 `compose.yaml` 文件描述整套服务,在你的服务器上一条命令拉起 Web + 数据库。

一个真实的 Web 应用往往不止一个容器:网站程序要跑,数据库要跟着跑,可能还有缓存、反向代理。手动一个个 docker run、再记住它们之间的网络和依赖,既繁琐又容易出错。Docker Compose 让你把这一整套服务写进一个 YAML 文件,用一条命令启动或销毁。

什么是 Docker Compose

Compose 是 Docker 官方的多容器编排工具。你在项目目录里写一个 compose.yaml(旧名 docker-compose.yml 仍兼容),声明每个服务用什么镜像、开哪些端口、挂载哪些数据、依赖谁。Compose 会自动为它们创建一个专用网络,容器之间可以直接用服务名互相访问,无需手动配 IP。

安装 Docker Compose 插件

新版 Compose 是 Docker CLI 的一个插件,命令是 docker compose(中间是空格,不再是老式的 docker-compose 连字符)。在 Ubuntu/Debian 上,如果你用官方源装了 Docker,插件通常已包含。单独安装或补装:

sudo apt update
sudo apt install docker-compose-plugin
docker compose version

能打印出版本号就说明可用。

compose.yaml 的结构

核心字段就几个:

  • services:定义每个容器,键名就是服务名。
  • image:使用的镜像。
  • ports:"宿主端口:容器端口",把容器端口映射到服务器上。
  • volumes:持久化数据或挂载配置,避免容器删除后数据丢失。
  • environment:注入环境变量(如数据库密码)。
  • dependson:声明启动顺序依赖。

示例:WordPress + MySQL

在空目录里创建 compose.yaml:

services:
  db:
    image: mysql:8.0
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: change-me-root
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wp
      MYSQL_PASSWORD: change-me-wp

  wordpress:
    image: wordpress:latest
    depends_on:
      - db
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wp
      WORDPRESS_DB_PASSWORD: change-me-wp
      WORDPRESS_DB_NAME: wordpress

volumes:
  db_data:

注意 WORDPRESSDBHOST 填的是 db——也就是数据库服务名,Compose 内置的网络会自动解析。

常用命令

在有 compose.yaml 的目录里执行:

docker compose up -d      # 后台启动全部服务
docker compose ps         # 查看运行状态
docker compose logs -f    # 实时查看日志
docker compose down       # 停止并删除容器和网络

up -d 的 -d 表示后台运行。down 默认保留具名 volume,数据不会丢;加 -v 才会连数据卷一起删除,请谨慎。改了 compose.yaml 后再执行一次 docker compose up -d,Compose 会自动重建有变化的容器。

启动后,浏览器访问 http://你的服务器IP:8080 即可看到 WordPress 安装向导。

小结

Docker Compose 把「多个容器如何协同」固化成一份可版本管理的 compose.yaml:services 描述容器,ports/volumes/environment 配置映射与数据,dependson 理顺依赖。日常只需 up -d 起、logs -f 看、down 停三条命令。把这个文件放进你的项目仓库,任何一台服务器都能一键还原出完全一致的环境。