Docker Compose Multi-Container Trên VPS TrumVPS - Deploy WordPress + MySQL + Redis Bằng 1 Lệnh Duy Nhất
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.
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ả:
- Services: từng container (MySQL, WordPress, Redis...)
- Networks: mạng nội bộ giữa các container
- Volumes: lưu trữ dữ liệu bền vững
- Environment: biến môi trường (password, config)
- Depends_on: thứ tự khởi động (MySQL khởi động trước WordPress)
Yêu Cầu
- VPS TrumVPS chạy Ubuntu 22.04/24.04
- Đã cài Docker Engine + Docker Compose Plugin (xem bài Cài Docker & Portainer)
- Domain đã trỏ về VPS (để cài Nginx Proxy Manager)
- Khuyến nghị: gói 80K (2GB RAM) — đủ chạy 4-5 container
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
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:
- Tạo networks và volumes nếu chưa có
- Pull images từ Docker Hub
- 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:
- Email:
admin@example.com - Password:
changeme
Sau khi đổi password, tạo Proxy Host mới:
- Domain:
yourdomain.com - Forward Hostname:
wordpress(tên service trong docker-compose) - Forward Port:
80 - Bật SSL → Request SSL Certificate (Let's Encrypt tự động)
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ệnh | Tác Dụng |
|---|---|
docker compose up -d | Khởi động tất cả services |
docker compose down | Dừng và xóa containers (giữ volumes) |
docker compose down -v | Dừng + xóa cả volumes ⚠️ mất data |
docker compose restart | Restart tất cả services |
docker compose logs -f | Xem logs realtime tất cả |
docker compose pull | Pull images mới nhất |
docker compose up -d --build | Rebuild + 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:
- Trên VPS cũ:
docker compose down - Copy toàn bộ thư mục project + volumes sang VPS mới (qua rsync/scp)
- Trên VPS mới:
docker compose up -d - Tất cả chạy lại y hệt — không cần cấu hình lại gì cả
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