Series Làm Chủ Portainer Bài 2: Quản trị Vòng đời Containers & Triển khai Ứng dụng Đa dịch vụ với Stacks
Sau khi kết nối vào môi trường local ở Bài 1, thanh điều hướng bên trái đã chuyển sang chế độ điều khiển chuyên sâu của Docker Engine. Trong công việc vận hành hằng ngày, 80% thời gian của bạn trên Portainer sẽ xoay quanh hai khu vực cốt lõi nhất: Containers (quản lý từng dịch vụ đơn lẻ) và Stacks (triển khai và điều phối cụm ứng dụng qua Docker Compose).

Hãy cùng đi sâu vào cách kiểm soát, debug và triển khai ứng dụng thực tế với hai công cụ này.
1. Quản trị Vòng đời Containers
Nếu ví Docker Image là bản thiết kế, thì Container chính là nơi ứng dụng thực sự sống và xử lý request. Khi truy cập mục Containers, bạn sẽ thấy toàn bộ 196 containers đang hoạt động trên máy chủ được liệt kê chi tiết.

A. Đọc hiểu các chỉ số trạng thái trên bảng danh sách
Thay vì phải gõ docker ps -a và căng mắt đọc từng dòng chữ tràn màn hình, Portainer phân tách thông tin thành các cột trực quan:
-
Name & State: Tên định danh của container đi kèm nhãn trạng thái màu sắc rõ ràng (
running,healthy,unhealthyhoặcexited). Chỉ cần nhìn lướt qua màu sắc là bạn biết ngay dịch vụ nào đang gặp sự cố.![image.png]()
-
Quick Actions (Cột thao tác nhanh): Tập hợp bộ 5 biểu tượng nhỏ nằm ngay bên cạnh tên container (Logs, Inspect, Stats, Exec Console, Attach). Đây là "vũ khí" giúp kỹ sư tiết kiệm hàng giờ đồng hồ khi cần xử lý sự cố nóng.





- IP Address: Địa chỉ IP nội bộ của container trong mạng ảo Docker (ví dụ
172.18.0.x), rất tiện khi cần kiểm tra kết nối nội bộ giữa các microservices.

- Published Ports: Hiển thị rõ cổng nào trên máy chủ (Host Port) đang được ánh xạ (map) vào cổng bên trong container (Container Port), kèm theo đường dẫn bấm trực tiếp để mở nhanh dịch vụ trên trình duyệt.

B. Các thao tác vận hành & Debug thực chiến
Phía trên danh sách là dãy nút điều khiển vòng đời (Start, Stop, Kill, Restart, Pause, Resume, Remove) cho phép bạn thao tác hàng loạt (bulk actions) trên nhiều container cùng lúc. Tuy nhiên, điểm ăn tiền nhất lại nằm ở bộ công cụ Quick Actions của từng container:

| Công cụ | Biểu tượng | Ứng dụng thực tế khi vận hành & Debug |
|---|---|---|
| Logs | Văn bản (📄) | Xem luồng log (stdout/stderr) theo thời gian thực. Bạn có thể bật/tắt Auto-refresh logs, lọc theo số dòng (Lines) hoặc tìm kiếm từ khóa lỗi mà không cần nhớ cú pháp docker logs -f --tail. |
| Inspect | Chữ i (ℹ️) | Xem cấu trúc JSON nguyên bản của container (biến môi trường Env, đường dẫn Mounts, cấu hình mạng). Cực kỳ hữu ích khi cần kiểm tra xem container đã nhận đúng biến .env hay chưa. |
| Stats | Biểu đồ (📈) | Giám sát trực tiếp mức tiêu thụ RAM, CPU, Network I/O và danh sách tiến trình (Processes) đang chạy bên trong container theo từng giây để phát hiện rò rỉ bộ nhớ (Memory Leak). |
| Exec Console | Dấu nhắc (>_) | Mở trực tiếp một phiên Terminal tương tác ngay trên trình duyệt mà không cần SSH vào máy chủ. Mẹo nhỏ: Nếu container dùng bản Alpine Linux nhẹ, hãy đổi lệnh mặc định từ /bin/bash sang /bin/sh trước khi bấm Connect. |
2. Quản lý Cụm Ứng dụng với Stacks
Trong kiến trúc thực tế, một hệ thống hiếm khi chạy độc lập một container mà thường là sự kết hợp của nhiều thành phần (ví dụ: Backend API + MySQL/PostgreSQL + Redis + Worker). Việc khởi tạo và nối mạng thủ công cho từng container sẽ rất tốn công và dễ sai sót.
Mục Stacks trên Portainer chính là giao diện quản lý của Docker Compose, giúp bạn gói gọn toàn bộ kiến trúc đa dịch vụ vào một file cấu hình docker-compose.yml duy nhất.
A. Quản lý các Stacks hiện hành
Trên hệ thống hiện tại đang có 4 Stacks hoạt động. Khi quan sát danh sách này, bạn cần lưu ý một chi tiết kỹ thuật quan trọng ở cột Control:
-
Total Control: Stack được khởi tạo trực tiếp trên giao diện Portainer. Bạn có toàn quyền chỉnh sửa file YAML, cập nhật biến môi trường và re-deploy ngay trên Web UI.
-
Limited Control: Stack được khởi chạy từ bên ngoài thông qua dòng lệnh CLI (
docker compose up -dtrực tiếp trên máy chủ). Portainer vẫn nhận diện và gom nhóm các container của Stack này để bạn theo dõi trạng thái, nhưng để sửa cấu hình YAML, bạn nên thao tác từ source gốc trên server hoặc chuyển quyền quản lý về Portainer.

B. Quy trình triển khai một Stack mới chuẩn chỉnh
Để đưa một cụm dịch vụ mới lên hệ thống, bạn chỉ cần thực hiện quy trình 4 bước trong mục Stacks -> + Add stack:

-
Đặt tên (Name): Nhập tên Stack (chỉ dùng chữ thường, số và dấu gạch ngang). Tên này sẽ trở thành tiền tố (prefix) cho các container và network được tạo ra.
-
Chọn phương thức nạp cấu hình (Build method):
-
Web editor: Dán trực tiếp nội dung
docker-compose.ymlvào trình soạn thảo có sẵn bộ kiểm tra lỗi cú pháp (syntax highlighting). -
Git Repository: Kết nối thẳng vào kho code (GitLab/GitHub/Bitbucket) để Portainer tự động kéo file Compose về và hỗ trợ cập nhật tự động qua Webhook (GitOps).
-

-
Cấu hình Biến môi trường (Environment variables): Thay vì viết cứng (hardcode) mật khẩu Database hay API Key vào file YAML, hãy thêm chúng vào phần Environment variables bên dưới hoặc tải file
.envlên để tách biệt code và cấu hình bảo mật. -
Triển khai (Deploy the stack): Nhấn nút Deploy, Portainer sẽ tự động pull images, dựng mạng nội bộ (Network), gắn ổ đĩa (Volume) và khởi chạy toàn bộ cụm container theo đúng thứ tự phụ thuộc (
depends_on).
3. Hệ sinh thái Hạ tầng Bổ trợ: Images, Volumes & Networks
Một container hay một stack không thể vận hành trơn tru nếu thiếu đi 3 mảnh ghép hạ tầng bên dưới trên thanh menu:
- Images (
205 Images): Kho lưu trữ các bản đóng gói ứng dụng trên ổ cứng máy chủ. Tại đây, Portainer đánh dấu rất rõ những image nào đang có nhãnUnused(không có container nào sử dụng). Bạn có thể lọc và xóa nhanh các bản build cũ này để thu hồi hàng chục GB dung lượng ổ cứng, hoặc chủ động pull/export/import image mới.

- Volumes (
55 Volumes): Do bản chất của Container là stateless (dữ liệu bên trong sẽ bốc hơi khi container bị xóa và tạo lại), mọi dữ liệu quan trọng như Database hay file upload bắt buộc phải gắn vào Volumes. Giao diện này giúp bạn kiểm soát chính xác volume nào đang gắn (Attached) vào container nào và đường dẫn vật lý thật sự trên máy chủ (/var/lib/docker/volumes/...).

- Networks (
10 Networks): Quản lý các dải mạng ảo cô lập (bridge,host,overlay). Bạn có thể kiểm tra xem những container nào đang nằm chung một "phòng mạng" để giao tiếp với nhau qua tên dịch vụ (Internal DNS) mà không cần phơi cổng (expose port) ra ngoài Internet.

4. Thực hành nhanh Bài 2
Để biến lý thuyết thành phản xạ thực tế, bạn hãy thử ngay 2 bài tập tình huống sau trên màn hình Portainer:
-
Thực hành Debug nóng với Container: Truy cập vào Containers, chọn một container bất kỳ đang ở trạng thái
running. Hãy bấm vào biểu tượng Logs (📄) để quan sát 100 dòng nhật ký gần nhất, sau đó chuyển sang biểu tượng Stats (📈) để xem container đó đang tiêu tốn bao nhiêu MB RAM ở thời điểm hiện tại. -
Giải phẫu cấu trúc một Stack: Chuyển sang mục [Stacks], nhấp vào một trong 4 Stacks hiện có. Hãy quan sát danh sách các containers thành phần bên trong, và nếu Stack đó có tab Editor, hãy mở xem cách các dịch vụ được kết nối với nhau qua file YAML.
Khép lại Bài 2, bạn đã nắm trong tay bộ kỹ năng quan trọng nhất để kiểm soát ứng dụng và xử lý sự cố hằng ngày trên Portainer! Ở Bài 3, chúng ta sẽ đi sâu vào cách quản lý dữ liệu bền vững với Volumes, thiết lập mạng cô lập với Networks và quy trình dọn dẹp tài nguyên rác an toàn mà không làm gián đoạn hệ thống.
All rights reserved
