Docker Compose Multi-Container Trên VPS TrumVPS - Deploy WordPress + MySQL + Redis Bằng 1 Lệnh Duy Nhất

📅 05/2026 · ⏱ 12 phút đọc · 🏷 Hướng Dẫn

Bạn đã biết Docker chạy từng container riêng lẻ. Nhưng khi cần triển khai cả một stack phức tạp — WordPress + MySQL + Redis + Nginx + phpMyAdmin — việc chạy từng lệnh docker run thủ công sẽ rất cồng kềnh và dễ sai sót. Docker Compose cho phép bạn định nghĩa toàn bộ stack trong một file YAML duy nhất, và deploy tất cả chỉ bằng 1 lệnh.

🚀 Sức mạnh của Docker Compose: 1 file YAML → định nghĩa 5+ containers, networks, volumes. 1 lệnh docker compose up -d → deploy toàn bộ. Muốn nâng cấp? Sửa file YAML → docker compose up -d lần nữa. Muốn migrate sang VPS khác? Copy file YAML + backup volumes → done.

Docker Compose Là Gì?

Docker Compose là công cụ chính thức của Docker để định nghĩa và chạy multi-container applications. Thay vì nhớ hàng chục tham số docker run, bạn viết một file docker-compose.yml mô tả:

Yêu Cầu

Cài Đặt Docker Compose Plugin

Trên Docker Engine mới nhất, Docker Compose đã được tích hợp sẵn dưới dạng plugin:

docker compose version

Nếu chưa có, cài thêm:

apt install docker-compose-plugin -y

File docker-compose.yml Hoàn Chỉnh

Đây là file cấu hình deploy WordPress + MySQL + Redis + phpMyAdmin + Nginx Proxy Manager — tất cả trong một stack:

version: '3.8'

services:
  # === MySQL 8 ===
  mysql:
    image: mysql:8.0
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root_password_here
      MYSQL_DATABASE: wordpress_db
      MYSQL_USER: wp_user
      MYSQL_PASSWORD: wp_password_here
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - app-network
    command: --default-authentication-plugin=mysql_native_password

  # === Redis Cache ===
  redis:
    image: redis:7-alpine
    container_name: redis
    restart: always
    command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
    volumes:
      - redis_data:/data
    networks:
      - app-network

  # === WordPress ===
  wordpress:
    image: wordpress:latest
    container_name: wordpress
    restart: always
    depends_on:
      - mysql
      - redis
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_USER: wp_user
      WORDPRESS_DB_PASSWORD: wp_password_here
      WORDPRESS_DB_NAME: wordpress_db
      WORDPRESS_TABLE_PREFIX: wp_
    volumes:
      - wordpress_data:/var/www/html
    networks:
      - app-network

  # === phpMyAdmin ===
  phpmyadmin:
    image: phpmyadmin:latest
    container_name: phpmyadmin
    restart: always
    depends_on:
      - mysql
    environment:
      PMA_HOST: mysql
      PMA_PORT: 3306
      UPLOAD_LIMIT: 100M
    networks:
      - app-network

  # === Nginx Proxy Manager ===
  npm:
    image: jc21/nginx-proxy-manager:latest
    container_name: nginx-proxy-manager
    restart: always
    ports:
      - "80:80"
      - "443:443"
      - "81:81"
    volumes:
      - npm_data:/data
      - npm_letsencrypt:/etc/letsencrypt
    networks:
      - app-network
    depends_on:
      - wordpress
      - phpmyadmin

volumes:
  mysql_data:
  redis_data:
  wordpress_data:
  npm_data:
  npm_letsencrypt:

networks:
  app-network:
    driver: bridge
💡 Giải thích: File này định nghĩa 5 services, 5 volumes (dữ liệu không mất khi restart), 1 network nội bộ (các container giao tiếp với nhau qua tên service, ví dụ mysql:3306). Nginx Proxy Manager chỉ expose port 80/443/81 ra ngoài — các container còn lại chỉ giao tiếp nội bộ.

Bước 1: Tạo File docker-compose.yml

Tạo thư mục project và file cấu hình:

mkdir -p /opt/wordpress-stack && cd /opt/wordpress-stack

nano docker-compose.yml

Dán nội dung file YAML ở trên, nhớ thay đổi password cho MySQL và WordPress.

Bước 2: Deploy Toàn Bộ Stack

docker compose up -d

Tham số -d (detached) chạy containers trong background. Docker Compose sẽ tự động:

  1. Tạo networks và volumes nếu chưa có
  2. Pull images từ Docker Hub
  3. Khởi động containers theo đúng thứ tự (MySQL → Redis → WordPress → phpMyAdmin → NPM)

Kiểm tra tất cả đã chạy:

docker compose ps

Bước 3: Cấu Hình Nginx Proxy Manager

Truy cập Nginx Proxy Manager tại http://your-server-ip:81

Đăng nhập mặc định:

Sau khi đổi password, tạo Proxy Host mới:

Làm tương tự cho phpMyAdmin với subdomain db.yourdomain.com → forward đến phpmyadmin:80.

Bước 4: Cài Redis Cache Cho WordPress

Để WordPress sử dụng Redis, cài plugin Redis Object Cache trong WordPress Admin. Sau đó thêm dòng này vào wp-config.php:

define('WP_REDIS_HOST', 'redis');

define('WP_REDIS_PORT', 6379);

Vào WordPress Admin → Settings → Redis → Enable Object Cache. Tốc độ load trang sẽ cải thiện đáng kể (giảm 50-70% query MySQL).

Các Lệnh Docker Compose Quan Trọng

LệnhTác Dụng
docker compose up -dKhởi động tất cả services
docker compose downDừng và xóa containers (giữ volumes)
docker compose down -vDừng + xóa cả volumes ⚠️ mất data
docker compose restartRestart tất cả services
docker compose logs -fXem logs realtime tất cả
docker compose pullPull images mới nhất
docker compose up -d --buildRebuild + deploy (nếu có Dockerfile)

Migrate Stack Sang VPS Khác

Một trong những ưu điểm lớn nhất của Docker Compose là khả năng migrate dễ dàng:

  1. Trên VPS cũ: docker compose down
  2. Copy toàn bộ thư mục project + volumes sang VPS mới (qua rsync/scp)
  3. Trên VPS mới: docker compose up -d
  4. Tất cả chạy lại y hệt — không cần cấu hình lại gì cả
Performance Tip: Với VPS TrumVPS gói 160K (4GB RAM), bạn có thể chạy thêm Elasticsearch, RabbitMQ, hoặc Grafana + Prometheus monitoring. Docker Compose scale cực tốt — chỉ cần thêm service vào file YAML.

Các Mẫu docker-compose.yml Phổ Biến Khác

Stack Node.js + MongoDB + Redis

Hoàn hảo cho ứng dụng MMO, bot Telegram, API backend:

services:
  app:
    build: ./app
    restart: always
    depends_on: [mongo, redis]
    environment:
      MONGO_URL: mongodb://mongo:27017/myapp
      REDIS_URL: redis://redis:6379
    networks: [app-network]
  mongo:
    image: mongo:7
    volumes: [mongo_data:/data/db]
    networks: [app-network]
  redis:
    image: redis:alpine
    networks: [app-network]

Stack Nextcloud + MariaDB + Redis

Giải pháp cloud storage tự host:

services:
  nextcloud:
    image: nextcloud:latest
    depends_on: [mariadb, redis]
    volumes: [nextcloud_data:/var/www/html]
    networks: [cloud-network]
  mariadb:
    image: mariadb:11
    environment:
      MARIADB_ROOT_PASSWORD: secret
      MARIADB_DATABASE: nextcloud
    volumes: [mariadb_data:/var/lib/mysql]
    networks: [cloud-network]

Cần VPS mạnh để chạy Docker Compose?

TrumVPS - CPU Platinum, NVMe SSD - Hoàn hảo cho multi-container stack!

Mã giảm giá: 42089QPI03TI (-9%)

THUÊ VPS NGAY