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 停三条命令。把这个文件放进你的项目仓库,任何一台服务器都能一键还原出完全一致的环境。