Một Docker Compose template hữu ích cần giúp người nhận hiểu cách khởi động, kiểm tra và tháo gỡ dịch vụ. Theo tài liệu Docker, Compose mô tả các dịch vụ và tài nguyên liên quan trong cấu hình YAML. Bài chia sẻ này đề xuất một mẫu Redis để cộng đồng trao đổi về ba phần: tham số cấu hình, trạng thái sẵn sàng và dữ liệu cần giữ lại.

Tình huống giả định là một lập trình viên muốn tạo Redis riêng cho bài thực hành, chưa kết nối ứng dụng thật. Mẫu dưới đây được biên soạn từ tài liệu chính thức, chưa được chạy thử trong quá trình viết bài. Các giá trị thời gian và tên dự án là lựa chọn minh họa; hướng dẫn không đưa ra cam kết hiệu năng hay cấu hình sản xuất.

1. Kiểm tra Docker Compose trước khi tạo dự án

Chuẩn bị máy thử nghiệm có Docker Engine, Docker CLI và Compose. Docker Desktop tích hợp các thành phần này; trên Linux đã có Engine và CLI, người dùng có thể cài Compose plugin theo tài liệu Docker. Tại terminal của máy thử nghiệm, nhập lần lượt hai lệnh dưới đây. Kết quả cần kiểm tra là Compose hiển thị phiên bản và Docker truy cập được Engine; nếu có lỗi kết nối hoặc quyền truy cập, dừng tại đây để xử lý.

docker compose version

docker info

Tạo một thư mục mới dành riêng cho ví dụ, rồi mở terminal trong thư mục đó. Bài viết dùng tên dự án fox9-compose-demo trong mọi lệnh vận hành. Hãy chọn tên khác nếu máy đã có một dự án cùng tên, đồng thời thay nhất quán ở các bước sau để tránh thao tác nhầm môi trường.

Minh họa 1. Kiểm tra Docker Compose trước khi tạo dự án
Minh họa mục 1: 1. Kiểm tra Docker Compose trước khi tạo dự án. Không phải ảnh chụp hệ thống thực tế.

2. Tạo tệp tham số cho image Redis

Trong thư mục thử nghiệm, tạo tệp .env với nội dung dưới đây. Tag redis:7-alpine có trong danh sách image chính thức được kiểm tra khi biên soạn; đây là lựa chọn cho ví dụ, không phải khẳng định phiên bản mới nhất. Docker Compose có thể lấy giá trị từ .env để nội suy vào compose.yaml. Bước này chỉ đặt tên image, chưa đưa dữ liệu hay thông tin đăng nhập vào cấu hình.

REDIS_IMAGE=redis:7-alpine

Mẫu sử dụng biểu thức ${REDIS_IMAGE:?Can_dat_REDIS_IMAGE}: theo tài liệu nội suy của Docker, biến bắt buộc bị thiếu hoặc rỗng sẽ khiến Compose báo lỗi. Cách này giúp người nhận nhận ra tham số chưa được chuẩn bị. Việc xác nhận giá trị thực sự được áp dụng sẽ thực hiện bằng lệnh kiểm tra cấu hình ở bước 4.

Minh họa 2. Tạo tệp tham số cho image Redis
Minh họa mục 2: 2. Tạo tệp tham số cho image Redis. Không phải ảnh chụp hệ thống thực tế.

3. Tạo template với healthcheck và volume

Tạo compose.yaml cạnh .env, giữ nguyên thụt dòng như mẫu. Dịch vụ redis chạy máy chủ; probe là tác vụ kiểm tra một lần từ container khác. Theo Docker, depends_on với điều kiện service_healthy đợi healthcheck của dịch vụ phụ thuộc đạt yêu cầu. Nếu chỉ khai báo phụ thuộc theo dạng ngắn, việc container đã khởi động không đồng nghĩa dịch vụ bên trong đã sẵn sàng.

services:

redis:

image: ${REDIS_IMAGE:?Can_dat_REDIS_IMAGE}

command: ["redis-server", "--appendonly", "yes"]

volumes:

- redis-data:/data

healthcheck:

test: ["CMD", "redis-cli", "ping"]

interval: 5s

timeout: 3s

retries: 10

start_period: 5s

probe:

image: ${REDIS_IMAGE:?Can_dat_REDIS_IMAGE}

depends_on:

redis:

condition: service_healthy

command: ["redis-cli", "-h", "redis", "ping"]

restart: "no"

volumes:

redis-data:

Image Redis chính thức dùng /data để lưu dữ liệu khi bật cơ chế persistence; mẫu gắn named volume vào vị trí này và bật append-only file bằng --appendonly yes. Tài liệu Redis mô tả AOF là cơ chế ghi lại thao tác ghi để phục hồi dữ liệu. Đây không phải bằng chứng đã sao lưu thành công, cũng không thay thế kế hoạch sao lưu và phục hồi riêng.

Mẫu cố ý không khai báo ports. Theo tài liệu networking của Docker, các dịch vụ trong mạng Compose mặc định có thể tìm nhau bằng tên dịch vụ, nên probe dùng địa chỉ redis. Tài liệu image Redis cảnh báo việc công khai cổng có thể làm dịch vụ không mật khẩu truy cập được từ bên ngoài. Vì vậy, hãy giữ ví dụ trong môi trường thử nghiệm, không tự thêm ánh xạ cổng công khai để tiện kết nối.

Minh họa 3. Tạo template với healthcheck và volume
Minh họa mục 3: 3. Tạo template với healthcheck và volume. Không phải ảnh chụp hệ thống thực tế.

4. Kiểm tra cấu hình đã được Compose phân giải

Khi đã lưu cả hai tệp, chạy lệnh dưới đây trước khi khởi động. Theo Docker, config phân giải biến và hiển thị mô hình cấu hình sẽ áp dụng. Hãy kiểm tra hai dịch vụ cùng nhận đúng image, redis-data gắn vào /data và không xuất hiện ánh xạ cổng ngoài ý muốn. Nếu thấy lỗi YAML hoặc biến bắt buộc, sửa tệp rồi kiểm tra lại; kết quả hợp lệ về cấu hình chưa chứng minh dịch vụ sẽ vận hành đúng.

docker compose -p fox9-compose-demo config

Minh họa 4. Kiểm tra cấu hình đã được Compose phân giải
Minh họa mục 4: 4. Kiểm tra cấu hình đã được Compose phân giải. Không phải ảnh chụp hệ thống thực tế.

5. Khởi động và đối chiếu kết quả kiểm tra

Sau khi kiểm tra cấu hình, nhập lần lượt các lệnh sau. Docker mô tả up -d là cách khởi động ở chế độ nền; ps -a hiển thị cả container đã dừng và logs đọc nhật ký dịch vụ. Kỳ vọng của ví dụ là redis đạt healthy, còn probe hoàn tất sau khi gửi PING. Theo Redis, PING không có đối số trả về PONG khi máy chủ xử lý được yêu cầu; đây là phản hồi cần tìm trong log, không phải kết quả đã được bài viết quan sát.

docker compose -p fox9-compose-demo up -d

docker compose -p fox9-compose-demo ps -a

docker compose -p fox9-compose-demo logs --tail 50

Nếu trạng thái hoặc nhật ký khác kỳ vọng, lưu thông báo lỗi để đối chiếu thay vì tuyên bố template đã hoạt động. Một phản hồi PONG chỉ phục vụ kiểm tra cơ bản trong tình huống này; đừng dùng nó làm bằng chứng cho hiệu năng, khả năng phục hồi hay tính đúng đắn của ứng dụng sẽ kết nối sau này.

Minh họa 5. Khởi động và đối chiếu kết quả kiểm tra
Minh họa mục 5: 5. Khởi động và đối chiếu kết quả kiểm tra. Không phải ảnh chụp hệ thống thực tế.

6. Tháo gỡ môi trường và chuẩn bị mẫu chia sẻ

Kết thúc thực hành, dùng lệnh dưới đây. Theo Docker, down mặc định xóa container và mạng của dự án, còn named volume được giữ lại. Không thêm -v nếu muốn giữ dữ liệu: tùy chọn này xóa cả named volume được khai báo trong cấu hình. Sau khi tháo gỡ, dùng lại ps -a để kiểm tra dự án không còn container của bài thực hành.

docker compose -p fox9-compose-demo down

docker compose -p fox9-compose-demo ps -a

Nếu chỉnh sửa template rồi gặp lỗi, có thể tháo gỡ bằng down, khôi phục hai tệp trước khi sửa và kiểm tra config lại. Đây chỉ là quay lại cấu hình; không nên mô tả thành khôi phục dữ liệu. Khi gửi mẫu cho cộng đồng, hãy ghi mục đích, môi trường dự kiến, tham số cần đổi, cách kiểm tra và thao tác có thể xóa dữ liệu. Câu hỏi mở để thảo luận là: bạn sẽ bổ sung phép kiểm tra nào trước khi nối ứng dụng thật vào mẫu này? Đây là lời mời trao đổi, chưa phải phản hồi của thành viên hay kinh nghiệm triển khai thực tế.

Minh họa 6. Tháo gỡ môi trường và chuẩn bị mẫu chia sẻ
Minh họa mục 6: 6. Tháo gỡ môi trường và chuẩn bị mẫu chia sẻ. Không phải ảnh chụp hệ thống thực tế.

Nguồn tham khảo

docker.com (16 tài liệu)
github.com (1 tài liệu)
redis.io (3 tài liệu)