VPS

VPS上的Docker Compose是什么?
轻松运行多容器应用

更新于 2026年9月14日 · 阅读约12分钟

VPS上运行Docker Compose多容器应用

什么是Docker Compose?

Docker Compose是一个用于定义和运行多容器Docker应用的工具。无需为每个容器输入冗长的docker run命令,只需编写一个docker-compose.yml文件,然后运行docker compose up即可启动所有服务。

例如,一个典型的Web应用通常由三个部分组成:Web服务器、应用服务器和数据库。Docker Compose可以让这三个服务协同工作,无需手动为每个容器配置网络。

💡 Docker Compose是Docker生态系统的一部分。从Docker v20.10开始,Compose v2已作为标准插件内置,无需单独安装。

Docker与Docker Compose的区别

初学者常常混淆这两者。下表进行了清晰对比:

功能DockerDocker Compose
管理范围单个容器同时管理多个容器
主要命令docker rundocker compose up
配置文件Dockerfiledocker-compose.yml
网络配置手动指定参数自动创建网络
适用场景单一服务、CI/CD多服务应用、开发/生产
依赖顺序不支持通过depends_on支持

在Ubuntu VPS上安装Docker + Compose

适用于运行Ubuntu 22.04或24.04的VPS,按以下步骤操作:

第一步:更新软件包并安装依赖

sudo apt update && sudo apt upgrade -y
sudo apt install -y ca-certificates curl gnupg lsb-release

第二步:添加Docker GPG密钥和仓库

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
  sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

第三步:安装Docker Engine + Compose插件

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin

第四步:将用户添加到docker组

sudo usermod -aG docker $USER
newgrp docker

验证安装

docker --version
docker compose version

⚠️ 如果找不到docker compose(v2),请确认已安装docker-compose-plugin——不要与已废弃的docker-compose(v1,带连字符)混淆。

docker-compose.yml文件结构

docker-compose.yml使用YAML格式,主要包含三个部分:

services:          # 定义每个容器
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - app

  app:
    build: .
    environment:
      - DB_HOST=db
    networks:
      - backend

  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - backend

volumes:           # 定义命名卷
  db_data:

networks:          # 定义自定义网络
  backend:
键名说明
services所有容器的集合
image使用的Docker镜像
build从Dockerfile构建
ports映射宿主机:容器端口
volumes挂载文件/目录
environment设置环境变量
depends_on指定启动依赖顺序
networks分配到指定网络
restart自动重启策略

示例:WordPress + MySQL

这是最常见的Docker Compose使用场景之一——运行WordPress和MySQL数据库:

version: '3.9'

services:
  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wp_data:/var/www/html
    depends_on:
      - db

  db:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: ${DB_PASSWORD}
    volumes:
      - db_data:/var/lib/mysql

volumes:
  wp_data:
  db_data:

保存为docker-compose.yml,然后运行:

docker compose up -d
docker compose ps   # 查看状态

常用命令

命令说明
docker compose up -d后台启动所有服务
docker compose down停止并删除容器
docker compose down -v停止并删除容器+卷
docker compose ps查看所有服务状态
docker compose logs -f实时查看日志
docker compose logs web查看"web"服务的日志
docker compose exec app bash进入容器Shell
docker compose restart db仅重启"db"服务
docker compose pull拉取最新镜像
docker compose build --no-cache重新构建镜像

网络与数据卷

网络

运行docker compose up时,Docker会自动创建一个名为<文件夹名>_default的默认网络。所有服务都可以通过服务名称互相通信——例如名为db的服务,可以在同一栈的其他容器中通过主机名db访问。

数据卷类型

类型示例适用场景
命名卷db_data:/var/lib/mysql数据库、持久化数据
绑定挂载./src:/app/src开发环境、热重载
匿名卷/tmp/cache临时数据

使用.env管理环境变量

敏感信息(如密码)应存储在单独的.env文件中:

# .env
DB_PASSWORD=myS3cur3P@ss
MYSQL_ROOT_PASSWORD=r00tS3cr3t

Docker Compose会自动加载同目录下的.env文件,YAML中的${DB_PASSWORD}会被替换为实际值。

🔒 提交代码前务必将.env添加到.gitignore,防止凭据泄露。

生产环境最佳实践

📌 AsiaGB VPS配备SSD存储,正常运行时间99%,适合运行Docker Compose应用。可选泰国(曼谷)或新加坡VPS,详见 asiagb.com/vps.html

常见问题

Docker和Docker Compose有什么区别?
Docker使用docker run管理单个容器。Docker Compose通过单个YAML文件定义和运行多容器应用,使服务编排更加简单便捷。
运行Docker Compose需要什么VPS配置?
对于WordPress+MySQL等轻量级应用至少需要2GB内存,复杂应用栈需要4GB或更多。2核CPU和SSD存储可以满足大多数工作负载。
Docker Compose v1和v2有什么区别?
Compose v1使用docker-compose命令(基于Python,已废弃)。Compose v2是Docker CLI插件,使用docker compose命令(无连字符),性能更好,支持最新的Compose规范。
停止容器后数据会丢失吗?
只要使用了卷,数据就不会丢失。再次运行docker compose up时,卷会重新挂载,数据库数据保持不变。只有docker compose down -v才会删除卷数据。
可以在AsiaGB VPS上使用Docker Compose吗?
完全可以。AsiaGB VPS运行Ubuntu等Linux系统,完全支持安装Docker和Docker Compose。提供泰国和新加坡两个地区选择,配备SSD存储,正常运行时间99%。
docker compose up -d是什么意思?
-d表示后台(分离)模式,容器在后台运行,不在终端输出日志,终端可以继续正常使用。

总结

Docker Compose是开发者在VPS上有序运行多容器应用的必备工具。主要优势包括:

  • 用一个YAML文件定义整个应用栈——便于团队协作
  • 自动创建网络——服务间通过名称直接通信
  • 数据卷管理简便——重启后数据持久保留
  • 一条命令docker compose up -d启动所有服务

AsiaGB VPS配备SSD存储和99%正常运行时间,是从开发到生产部署Docker Compose应用的理想选择。