Giới thiệu: Tại sao Docker Compose tồn tại
Hãy thừa nhận đi: bạn khoái việc chạy 17 cửa sổ terminal - đó là cách làm “hoài niệm” (headless), nhưng ngày nay với Docker Desktop (GUI), bạn vẫn sẽ phải chạy 17 container - chỉ để khởi động microservices của ứng dụng.
Ai mà không thích việc gõ liên tục lệnh docker run -p this -v that , env something
trong khi cầu nguyện các vị thần DevOps? Docker Compose ra đời, công cụ làm những việc mà bạn chắc chắn có thời gian làm thủ công. Nó như một người trông trẻ cho các container, nhưng không phán xét bạn vì cần người trông trẻ.
Microservices: Khi ứng dụng của bạn cần luật sư ly hôn
Kiến trúc microservices là nghệ thuật chia một ứng dụng monolithic thành các dịch vụ nhỏ, độc lập giao tiếp qua các API call “thụ động tích cực”. Mỗi dịch vụ xử lý một nhiệm vụ (ví dụ: xác thực, thanh toán, tạo GIF mèo) và sống trong môi trường container hóa riêng, vì hợp tác là thứ lỗi thời. Hoặc bạn có thể nghĩ rằng vì tất cả các thành phần nhỏ này được dán lại với nhau, nên ứng dụng mới hoạt động!
Ví dụ thực tế: Xem repo GitHub của Umami, một công cụ analytics tự host. File docker-compose.yml
của họ định nghĩa:
- Dịch vụ PostgreSQL (vì dữ liệu xứng đáng có drama riêng).
- Dịch vụ Redis (cho các vấn đề cache không đáng tin).
- Ứng dụng Umami (phán xét lưu lượng website của bạn).
Mỗi dịch vụ chạy độc lập, scale riêng biệt và “buôn chuyện” qua một mạng chia sẻ. Nếu database sập, ứng dụng vẫn chạy tiếp, phớt lờ như một group chat sau khi ai đó nói “OK”. Docker Compose kết nối chúng lại, chứng minh rằng ngay cả các dịch vụ “ly hôn” vẫn có thể cùng tồn tại vì lợi ích của những đứa trẻ (người dùng).
TL;DR: Microservices = “Tôi không cần bạn, nhưng Docker Compose bảo là cần.” 🐳💔
Bước 1: Cài đặt Docker Compose (Vì Bạn Chưa Đủ Khổ)
Đầu tiên, cài Docker và Docker Compose. May cho bạn (và cả tôi), vì chúng ta dùng Docker Desktop (xem phần 1), Docker Compose đã được tích hợp sẵn, nên có thể bỏ qua bước này.
Nếu dùng Linux, giả sử bạn đã cài Docker Engine và Docker CLI, và muốn cài Docker Compose như một plugin, đọc tài liệu chính thức hoặc làm theo hướng dẫn ngắn này:
Cài Docker Compose trên Linux Server
Bước 1: Chọn Hình Thức Hành Hạ
Ah, cài Docker Compose, phần thú vị nơi bạn chọn giữa hai lựa chọn hấp dẫn:
- Dùng Repository của Docker (cho người lạc quan tin vào nguồn third-party).
- Cài thủ công (cho người thích tự làm khó mình).
Lưu ý: Hướng dẫn này giả định bạn đã cài Docker Engine và Docker CLI, vì bạn thích lắp đồ IKEA không cần hướng dẫn.
Phương pháp A: Cài qua Repository (Cho Người Dễ Tin)
Thêm Repository của Docker
Làm theo hướng dẫn mơ hồ dành cho OS của bạn. Có thể sai gì được?Cập nhật & Cài đặt
Copy-paste các lệnh sau và cầu nguyện:Ubuntu/Debian (Chào tạm biệt sự tỉnh táo):
sudo apt-get update # Ngắm thanh tiến trình như xem Netflix sudo apt-get install docker-compose-plugin # Chấp nhận số phận
Distros dùng RPM (Fedora/CentOS):
sudo yum update # Vì 45 phút cập nhật là *bình thường* sudo yum install docker-compose-plugin # Đón nhận dependency hell
Kiểm tra (Spoiler: Sẽ Fail)
Chạy:docker compose version # Bắt chéo ngón tay
Kết quả mong đợi:
Docker Compose version vN.N.N
(vớiN.N.N
= phiên bản bạn sẽ không bao giờ nhớ).
Phương pháp B: Cài Thủ Công (Cho Người Thích Hành Xác)
Lưu ý: Đây là lúc bạn học cách yêu công việc lặp đi lặp lại.
Tải Binary (Vì Tự Động Là Thứ Xa Xỉ)
Chạy lệnh siêu trực quan này:DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} mkdir -p $DOCKER_CONFIG/cli-plugins curl -SL https://github.com/docker/compose/releases/download/v2.35.0/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
Dịch: “Ê GitHub, đưa tao cái binary không đáng tin đó!”
Cấp Quyền Thực Thi (Hoặc Không, Sống Nguy Hiểm)
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose # Cho phép nó phá hoại ngày của bạn
Pro Tip: Nếu muốn mọi user cùng khổ, dùng:
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose # Lan tỏa đau khổ
Kiểm tra (Cho Người Ảo Tưởng)
docker compose version # Kết quả: Một số phiên bản bạn sẽ quên ngay
Cập nhật: Vì Bạn Chắc Chắn Sẽ Nhớ Làm Điều Này
Lặp lại các bước cài đặt mỗi khi có update. Phương châm của Docker: “Sửa làm gì khi có thể bắt họ cài lại?”
Kết luận: Có Đáng Không?
Chúc mừng! Bạn đã cài xong Docker Compose. Giờ bạn đã sẵn sàng viết các file YAML sẽ fail theo những cách mới mẻ. Nhớ: Nếu nó hỏng, đó là lỗi của bạn. Luôn luôn.
P.S. Lưu hướng dẫn này, bạn sẽ cần lại sau 3 tháng khi phiên bản phá vỡ tiếp theo ra mắt. 🐳💥
Bước 2: File docker-compose.yml
: Địa Ngục YAML, Nhưng Phong Cách
Tạo file docker-compose.yml
. YAML: nơi thụt lề quan trọng hơn lời khuyên trị liệu của bạn. Đây là template cho một app cơ bản (vì bạn chắc chắn đang bắt đầu với “cơ bản”):
version: '3.8' # Dùng 3.8 vì 4.0 dành cho người thích thất vọng
services:
web:
image: your-app:latest # Tag latest: vì debug là niềm vui!
ports:
- "80:80" # Map port 80 sang port 80. Đột phá.
environment:
- DEBUG=True # Bạn sẽ cần khi mọi thứ nổ tung
depends_on:
- db # Vì database *chắc chắn* sẵn sàng trong 0.2 giây
db:
image: postgres:13 # Phiên bản bạn sẽ quên update
volumes:
- pg_data:/var/lib/postgresql/data # Lưu data? Ý tưởng mới.
environment:
- POSTGRES_PASSWORD=password # Bảo mật là việc của người khác
volumes:
pg_data: # Bộ nhớ ma thuật biến mất khi bạn hắt xì
Bạn không cần thực sự tạo file docker-compose này, đây chỉ để minh họa cách file
yaml
không-quá-đơn-giản này cứu bạn khỏi việc chạy lệnhdocker run image-name
nhiều lần, cũng như đóng/stop nhiều container.
Vì chúng ta sẽ không tự tạo file docker-compose, hãy dùng của người khác. Do đó, tôi sẽ giới thiệu một công cụ hữu ích như trong hướng dẫn trước, nhưng lần này chúng ta sẽ chạy một file docker-compose
thay vì image
.
Bạn đã bao giờ muốn tóm tắt - hay làm gì đó tương tự - với tài liệu như PDF bằng AI nhưng lo ngại về quyền riêng tư?
Chào RAGFlow
nào, nó sẽ giúp bạn, có thể dùng ngay cả với Local AI Models như Ollama
.
Retrieval-Augmented Generation
) mã nguồn mở dựa trên deep document understanding. Nó cung cấp luồng công việc RAG đơn giản cho mọi quy mô doanh nghiệp, kết hợp LLM (Large Language Models) để cung cấp khả năng trả lời câu hỏi chính xác, với trích dẫn từ nhiều nguồn dữ liệu phức tạp.git clone https://github.com/infiniflow/ragflow.git
Lệnh này sẽ clone (tải về) repo này vào máy bạn, thư mục đích sẽ là C:/User/Tên-User/ragflow
cd ragflow/docker
Chạy lệnh này sau khi clone xong để di chuyển đến C:/User/Tên-User/ragflow/docker
- nơi chứa file docker-compose
.
Bước 3: Chạy Nó (Và Cầu Nguyện)
Trong thư mục đó, thực thi lệnh sau. Lệnh này sẽ đặt tên cho stack compose là “ragflow”, trong khi lệnh mặc định từ hướng dẫn trên GitHub sẽ cho ra tên stack compose là “docker”, có thể gây xung đột với stack tương lai của bạn nếu nó cũng để tên mặc định.
docker compose -f docker-compose.yml -p ragflow up -d
Ví dụ
Nếu app crash ngay lập tức, chào mừng đến với Docker! Các fix phổ biến bao gồm:
- Đổ lỗi cho bản release (
:latest
không có nghĩa là ổn định.) - Nhận ra bạn đã quên vài bước.
- Theo dõi logs để tìm bug, vì bạn là người thích hành xác.
docker-compose logs -f
- Lướt qua mục
#Issue
trên repo GitHub để xem có ai gặp lỗi giống bạn không.
Sau khi chờ pull images và build container, bạn có thể gặp lỗi như tôi: dependency failed to start: container ragflow-mysql is unhealthy
Thử fix này
$ chmod 644. /init.sql
Rồi chạy lại lệnh
docker compose -f docker-compose.yml -p ragflow up -d
Giờ bạn sẽ thấy stack compose đã được tạo và chạy trên Docker
Giờ bạn có thể truy cập qua localhost:80
trên trình duyệt
Bước 4: Debug: 5 Giai Đoạn Của Sự Đau Khổ
Phủ nhận: “Nó chạy trên máy tôi mà!”
Giận dữ: “Tại sao MySQL dùng 200% CPU?!”
Mặc cả: “Tôi sẽ không dùng
:latest
nữa. Làm ơn chạy đi.”Trầm cảm:
docker-compose down -v
(tùy chọn hạt nhân). Lệnh đúng cho Ragflow làdocker compose -f docker-compose.yml -p ragflow down -v
, nhớ lệnh này nếu bạn rất muốn dừng stack.Chấp nhận: Thêm
restart: always
và coi như xong.
Bước 5: Tính Năng Nâng Cao Bạn Sẽ Lờ Đi
Docker Compose có hàng tá tính năng bạn sẽ không bao giờ dùng, như:
- Networks: Vì mạng mặc định là cho nghiệp dư.
- Secrets: Lưu password dạng plaintext như một kẻ nổi loạn.
- Profiles: Tổ chức services? Ừ, chắc vậy.
Kết luận: Ôm Lấy Sự Hỗn Độn
Docker Compose là băng dính trong orchestration container, nó lởm khởm, mong manh và bằng cách nào đó giữ cả sự nghiệp của bạn. Nó có hoàn hảo? Không. Nó tốt hơn quản lý container thủ công? Rõ ràng. Giờ hãy tiến lên và docker-compose down
mọi vấn đề.
P.S. Nếu hướng dẫn này không hoạt động, đó là lỗi của bạn. Docker Compose là hoàn hảo. Có lẽ vậy.
Mẹo cuối: Khi nghi ngờ, thêm RAM. 🐳💥