Thứ Sáu, 22 tháng 8, 2025

Bài 8: Quản Lý Nhiều Microservices Với Docker Compose

Danh sách bài viết trong series Học microservice cơ bản
  • Bài 1: Microservices Là Gì?
  • Bài 2: Chuẩn Bị Môi Trường Để Học Microservices
  • Bài 3: Viết Microservice Đầu Tiên
  • Bài 4: Microservices Và Monolith
  • Bài 5: Giao Tiếp Giữa Microservices
  • Bài 6: Giao Tiếp Nâng Cao Trong Microserivce với RabbitMQ
  • Bài 7: Container Hóa Microservices Với Docker
  • Bài 8: Quản Lý Nhiều Microservices Với Docker Compose
  • Bài 9: Học microservices cơ bản với minikube

Bài 8: Quản Lý Nhiều Microservices Với Docker Compose

Ở bài trước, bạn đã học cách container hóa Menu Service với Docker – một bước tiến lớn trong hành trình học microservices. Nhưng nếu bạn có nhiều microservices (như Menu ServiceOrder Service, và RabbitMQ), việc chạy từng container một sẽ rất mất thời gian. Hôm nay, mình sẽ giới thiệu một công cụ giúp bạn quản lý và chạy nhiều microservices cùng lúc: Docker Compose. Mình nhớ lúc mới học Docker Compose, mình thấy nó như một “trợ lý” giúp mình điều phối mọi thứ dễ dàng hơn. Mình sẽ hướng dẫn bạn từng bước để chạy ba microservices cùng lúc, và giải thích mọi thứ thật rõ ràng. Sẵn sàng chưa nào?

Docker Compose Là Gì? Hãy Nghĩ Về Việc Điều Phối Nhiều Nhân Viên Trong Quán

Trước tiên, mình muốn bạn hiểu Docker Compose là gì một cách đơn giản. Hãy quay lại ví dụ quán ăn mà chúng ta đã dùng ở các bài trước. Giả sử bạn có ba nhân viên: một người làm món ăn (Menu Service), một người nhận đơn hàng (Order Service), và một người chuyển tin nhắn giữa các bộ phận (RabbitMQ). Nếu bạn phải gọi từng người và chỉ dẫn riêng lẻ, sẽ rất mất thời gian. Thay vào đó, bạn viết một kế hoạch chung: “Mọi người làm việc cùng lúc, người này làm món, người kia nhận đơn, và người còn lại chuyển tin.” Docker Compose cũng giống như kế hoạch đó: nó giúp bạn chạy và quản lý nhiều container (microservices) cùng lúc, chỉ với một lệnh duy nhất.

Nói kỹ thuật hơn, Docker Compose là một công cụ dùng file YAML (docker-compose.yml) để định nghĩa và chạy nhiều container. Bạn chỉ cần viết file này, rồi dùng một lệnh để khởi động toàn bộ hệ thống.

Bước 1: Cài Đặt Docker Compose Trên Máy Của Bạn

Hãy bắt đầu bằng cách cài Docker Compose trên Ubuntu. Nếu bạn chưa cài Docker (từ bài 7), hãy quay lại bài trước để cài trước nhé.

  1. Mở terminal và chạy lệnh sau để tải Docker Compose:
    sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  2. Cấp quyền thực thi cho file vừa tải:
    sudo chmod +x /usr/local/bin/docker-compose
  3. Kiểm tra xem Docker Compose đã cài thành công chưa:
    docker-compose --version

    Nếu bạn thấy kết quả như Docker Compose version v2.20.0, Docker Compose đã sẵn sàng.

Bước 2: Chuẩn Bị Các Microservices

Chúng ta sẽ chạy ba microservices cùng lúc: Menu ServiceOrder Service, và RabbitMQ (từ bài 5 và 6). Hãy đảm bảo bạn có các thư mục sau:

  • Menu Service (từ bài 5): Đã có app.jspackage.json, và Dockerfile (từ bài 7).
  • Order Service (từ bài 6): Gửi message vào RabbitMQ.
  • RabbitMQ: Sẽ chạy qua image có sẵn từ Docker Hub.

Nếu bạn chưa có, hãy quay lại các bài trước để tạo. Dưới đây là cấu trúc thư mục mình gợi ý:

microservices/
├── menu-service/
│   ├── app.js
│   ├── package.json
│   └── Dockerfile
└── order-service/
    ├── app.js
    ├── package.json
    └── Dockerfile

Bước 3: Tạo Dockerfile Cho Order Service

Menu Service đã có Dockerfile từ bài 7, giờ chúng ta cần tạo Dockerfile cho Order Service:

  1. Di chuyển vào thư mục order-service:
    cd order-service
  2. Tạo file Dockerfile:
    touch Dockerfile

    Mở file Dockerfile trong VS Code (code Dockerfile) và dán nội dung sau:

    FROM node:18
    WORKDIR /app
    COPY package*.json ./
    RUN npm install
    COPY . .
    EXPOSE 3002
    CMD ["node", "app.js"]

Bước 4: Tạo File Docker Compose

Bây giờ, chúng ta sẽ tạo file docker-compose.yml để chạy cả ba microservices cùng lúc.

  1. Tạo một thư mục chung (nếu chưa có) và di chuyển vào đó:
    mkdir microservices
    cd microservices

    Đảm bảo thư mục menu-service và order-service đã nằm trong microservices/.

  2. Tạo file docker-compose.yml:

    touch docker-compose.yml

    Mở file docker-compose.yml trong VS Code (code docker-compose.yml) và dán nội dung sau:

    version: '3'
    services:
     menu-service:
       build: ./menu-service
       ports:
         - "3001:3001"
       container_name: menu-container
    
     order-service:
       build: ./order-service
       ports:
         - "3002:3002"
       container_name: order-container
       depends_on:
         - rabbitmq
    
     rabbitmq:
       image: rabbitmq:3-management
       ports:
         - "5672:5672"
         - "15672:15672"
       container_name: rabbitmq-container

    Giải thích file:

    • menu-service và order-service: Build container từ Dockerfile trong thư mục tương ứng.
    • rabbitmq: Dùng image có sẵn từ Docker Hub (rabbitmq:3-management), với cổng 5672 (cho message queue) và 15672 (cho giao diện quản lý).
    • depends_on: Đảm bảo RabbitMQ chạy trước Order Service.

Bước 5: Chạy Hệ Thống Với Docker Compose

Đã đến lúc chạy toàn bộ hệ thống:

  1. Trong thư mục microservices, chạy lệnh:
    docker-compose up -d
    • -d: Chạy ở chế độ nền. Nếu thành công, Docker Compose sẽ build và chạy ba container: menu-containerorder-container, và rabbitmq-container.
  2. Kiểm tra các container đang chạy:
    docker ps

    Bạn sẽ thấy ba container trong danh sách.

Bước 6: Kiểm Tra Hệ Thống

Hãy kiểm tra xem các microservices có hoạt động đúng không:

  1. Kiểm tra Menu Service:
    • Mở Postman, tạo request GET với URL: http://localhost:3001/menu.
    • Nhấn “Send”, bạn sẽ thấy:
      [
       { "id": 1, "name": "Phở bò", "price": 50000 },
       { "id": 2, "name": "Bún chả", "price": 40000 },
       { "id": 3, "name": "Cơm tấm", "price": 35000 }
      ]
  2. Kiểm tra RabbitMQ:
    • Mở trình duyệt, truy cập: http://localhost:15672.
    • Đăng nhập với username: guest, password: guest.
    • Bạn sẽ thấy giao diện RabbitMQ.
  3. Kiểm tra Order Service:
    • Mở Postman, tạo request POST với URL: http://localhost:3002/order.
    • Chọn tab “Body”, chọn “raw”, nhập JSON: {}.
    • Nhấn “Send”, bạn sẽ thấy: Đơn hàng đã được gửi để xử lý.

Câu Hỏi Trắc Nghiệm: Kiểm Tra Hiểu Biết Của Bạn

Hãy thử trả lời vài câu hỏi để xem bạn đã nắm được chưa nhé:

  1. Docker Compose dùng để làm gì?
    A. Chạy một container duy nhất
    B. Quản lý và chạy nhiều container cùng lúc
    Đáp án: B. Quản lý và chạy nhiều container cùng lúc.

  2. File docker-compose.yml được viết bằng ngôn ngữ nào?
    A. JSON
    B. YAML
    Đáp án: B. YAML.

  3. Nếu RabbitMQ không chạy, Order Service có hoạt động không?
    A. Có, nhưng phần gửi message sẽ lỗi
    B. Không, toàn bộ hệ thống sẽ dừng
    Đáp án: A. Có, nhưng phần gửi message sẽ lỗi.

Kết Thúc: Bạn Đã Chạy Được Nhiều Microservices Cùng Lúc

Hôm nay, bạn đã học cách dùng Docker Compose để chạy nhiều microservices cùng lúc – một kỹ năng rất hữu ích. Bạn đã khởi động Menu ServiceOrder Service, và RabbitMQ chỉ với một lệnh. Ở bài tiếp theo, chúng ta sẽ học cách triển khai microservices lên Kubernetes, để bạn có thể chạy hệ thống trên một môi trường lớn hơn. Hẹn gặp bạn ở bài sau nhé!

=============================
Website không chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn không muốn bị AI thay thế và tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp hay làm chủ Database thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ bí kíp thực chiến, thủ tục, quy trình của gần 20 năm kinh nghiệm (mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google) từ đó giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
cở sở dữ liệu, cơ sở dữ liệu quốc gia, database, AI, trí tuệ nhân tạo, artificial intelligence, machine learning, deep learning, LLM, ChatGPT, DeepSeek, Grok, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master