

Khi ứng dụng cần nhiều services chạy cùng nhau (app + database + cache + queue worker), Docker Compose là giải pháp. Coolify hỗ trợ deploy Docker Compose trực tiếp, paste file docker-compose.yml và deploy.
I. Khi nào cần Docker Compose?
- Ứng dụng gồm nhiều containers: web app + database + Redis + worker
- Cần kiểm soát networking giữa services
- Muốn deploy stack có sẵn (WordPress + MySQL, GitLab, Supabase…)
- Khi Nixpacks/Dockerfile đơn không đủ cho multi-service apps
ℹ️ Nếu chỉ cần 1 app + 1 database, không cần Docker Compose, tạo riêng từng resource dễ quản lý hơn. Docker Compose phù hợp khi services phụ thuộc chặt chẽ vào nhau.
II. Tạo Docker Compose Resource
- Vào Project → Environment → “+ Add Resource”
- Chọn “Docker Compose Empty” (viết từ đầu) hoặc link repo chứa file docker-compose.yml
- Paste hoặc edit docker-compose.yml trong editor
- Click Deploy




III. Ví dụ: WordPress + MySQL


services:
wordpress:
image: wordpress:latest
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: wp_user
WORDPRESS_DB_PASSWORD: wp_password
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
ports:
- "8080:80"
depends_on:
- mysql
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wp_user
MYSQL_PASSWORD: wp_password
volumes:
- mysql_data:/var/lib/mysql
volumes:
wordpress_data:
mysql_data:
⚠️ Trong Coolify Docker Compose, không cần khai báo networks: Coolify tự tạo shared network cho tất cả services trong compose file. Services tự nhìn thấy nhau qua tên service.
IV. Ví dụ: App + PostgreSQL + Redis
services:
app:
build: .
environment:
DATABASE_URL: postgresql://appuser:apppass@postgres:5432/myapp
REDIS_URL: redis://redis:6379
ports:
- "3000:3000"
depends_on:
- postgres
- redis
postgres:
image: postgres:16-alpine
environment:
POSTGRES_USER: appuser
POSTGRES_PASSWORD: apppass
POSTGRES_DB: myapp
volumes:
- pg_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
worker:
build: .
command: node worker.js
environment:
DATABASE_URL: postgresql://appuser:apppass@postgres:5432/myapp
REDIS_URL: redis://redis:6379
depends_on:
- postgres
- redis
volumes:
pg_data:
redis_data:
V. Domain cho Docker Compose Services
Mặc định chỉ service có ports mapping mới accessible từ ngoài. Để gán domain:
- Deploy compose stack
- Vào resource → tìm service cần domain (VD: wordpress)
- Set domain trong FQDN field:
https://blog.example.com - Traefik tự route traffic đến đúng container
VI. Persistent Volumes


Volumes trong Docker Compose được Coolify tự quản lý:
- Named volumes: Khai báo trong
volumes:section → Coolify tạo Docker volumes tự động - Bind mounts: Có thể map path trên host:
./data:/app/data - Data persist qua redeploy: chỉ mất khi xoá volume thủ công
🚨 Khi xoá resource Docker Compose, Coolify hỏi có muốn xoá volumes không. Chọn “Keep Volumes” nếu muốn giữ data!
VII. Environment Variables trong Compose
Có 2 cách set environment variables:
- Inline trong compose file:
environment:section (hiển thị rõ trong file) - Qua Coolify UI: Tab “Environment Variables”: an toàn hơn, không lộ trong file
- Coolify UI variables override inline values: ưu tiên cao hơn
VIII. Tổng kết
Docker Compose trên Coolify giúp deploy multi-service stacks dễ dàng, paste compose file, deploy, gán domain. Coolify xử lý networking, volumes, và SSL tự động. Bài tiếp: CI/CD với GitHub, GitLab, Bitbucket.
















No Comment! Be the first one.