Bạn muốn biết các ứng dụng Docker đang làm gì phía sau? Hãy tìm hiểu thêm về cửa sổ bí mật được gọi là logs, cho phép bạn xem từng hành động của chúng trong containers. Logs rất hữu ích để khắc phục sự cố. Nhưng trước khi bắt đầu, hãy xem nhanh Docker và Docker Compose là gì.
Docker cho phép bạn đóng gói các ứng dụng của mình vào các container nhỏ và chạy chúng trên hầu hết các hệ điều hành mà không cần bất kỳ phụ thuộc nào. Nó giống như đặt các ứng dụng của bạn trong những hộp nhỏ gọi là Containers, có thể chạy giống nhau ở mọi nơi. Hiểu rõ về containers là điều kiện tiên quyết quan trọng để học Docker Compose. Vì vậy, tôi khuyên bạn trước tiên nên đọc bài viết của chúng tôi về những lợi ích của containerization.
Docker Compose đi kèm với Docker và đơn giản hóa việc phát triển nhiều ứng dụng được container hóa bằng cách kết nối các service, network và storage của chúng. Docker container logs và Docker Compose logging giúp developer nhìn thấy từng container đang làm gì.
Vậy, bạn có tò mò về Docker Compose Logs không? Bạn đang ở đúng nơi. Bài viết này sẽ giải thích những kiến thức cơ bản về Docker Compose logs và đề cập các chi tiết nâng cao hơn. Tìm hiểu cách tận dụng tối đa Docker Compose cho các dự án của bạn.
Tầm Quan Trọng của Docker Compose Logs
Hình dung một developer triển khai ứng dụng với Docker nhưng bỏ qua việc thiết lập Docker logs. Lúc đầu mọi thứ có vẻ ổn. Nhưng sớm sau đó, người dùng phát hiện lỗi và ứng dụng chạy chậm. Nếu không có Docker logs, developer không thể thấy được điều gì sai trong Docker containers. Docker Compose logs giống như một bản ghi chi tiết của những container này. Chúng ghi lại mọi chi tiết của những gì xảy ra, điều này rất quan trọng để tìm ra và sửa chữa các vấn đề sau này.
Là một Developer hoặc System Admin, bạn phải hiểu những gì xảy ra bên trong và giữa các ứng dụng multi-chain. Đây là nơi mà Docker Compose logs đóng vai trò như một công cụ hữu ích. Vậy, tại sao những logs này lại cần thiết?
-
Khắc Phục Sự Cố và Gỡ Lỗi
Kiểm tra docker logs khi ứng dụng không chạy đúng hoặc gặp lỗi. Docker logs là tài nguyên đầu tiên bạn có thể xem để theo dõi vấn đề. Bằng cách kiểm tra docker logs, developer có thể xác định nguyên nhân gốc rễ và nguồn của các vấn đề, dù là lỗi trong code, cấu hình sai, hay vấn đề về tài nguyên.
-
Giám Sát Sức Khỏe Ứng Dụng
Giám sát thường xuyên application logs giúp hiểu được tình trạng sức khỏe tổng thể của các service. Logs có thể phát hiện những dấu hiệu cảnh báo sớm, chẳng hạn như lỗi lặp lại và phản hồi chậm. Quan sát những mô hình này sớm có thể ngăn chặn các vấn đề tiềm ẩn trong tương lai.
-
Kiểm Toán và Tuân Thủ
Đối với các ứng dụng cần tuân theo các tiêu chuẩn cụ thể, docker logs là bằng chứng đầu tiên cho thấy liệu ứng dụng có tuân thủ các hướng dẫn hay không. Những logs này cũng đóng vai trò thiết yếu trong việc giám sát các hoạt động được phép hoặc không được phép.
-
Tối ưu hóa
Logs là những tài nguyên quý giá để tối ưu hóa phần mềm bằng cách cung cấp dữ liệu hiệu suất. Ví dụ, developer có thể xác định các truy vấn chạy chậm, đường mã không hiệu quả, hoặc tài nguyên được sử dụng không đầy đủ.
Tạo Công Thức Docker: Triển Khai Web Server
Trong phần này, chúng ta sẽ tạo một công thức Docker cùng nhau. Trước tiên, chúng ta cần xây dựng một cái gì đó để bắt đầu hành trình với Docker Compose logs. Chúng ta sẽ triển khai một web server cho mục đích này. Để tạo một Dockerfile, chỉ cần chạy nano tệp Dockerfile trong thư mục mong muốn trên VPS của bạn với nội dung sau và sau đó lưu nó:
FROM nginx:alpine RUN rm /usr/share/nginx/html/index.html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
Vậy, mỗi dòng code này làm gì?
- Chúng ta bắt đầu với một base nhẹ, nginx:alpine.
- Tiếp theo, chúng ta xóa trang welcome mặc định của Nginx.
- Sau đó, chúng ta đảm bảo rằng web server đang lắng nghe trên port 80.
- Cuối cùng, chúng ta chạy Nginx server với CMD.
Bây giờ Dockerfile của chúng ta đã sẵn sàng, chúng ta sẽ tiếp tục bước tiếp theo, đó là tạo Docker Compose file. Đây là cấu trúc của docker-compose.yml tệp:
version: '3.8' services: web: build: . ports: - "8080:80" volumes: - ./index.html:/usr/share/nginx/html/index.html
Chúng ta hãy phân tích nó để hiểu hoàn toàn từng phần:
- Chúng tôi đang sử dụng phiên bản 3.8.
- Trên dòng tiếp theo, chúng ta đặt tên service của chúng ta là ""web“.
- Sau đó, chúng ta hướng dẫn Docker xây dựng web server của chúng ta từ thư mục hiện tại.
- Chúng ta liên kết port 8080 trên host của chúng ta với port 80 trong container của chúng ta để cho phép web server của chúng ta thiết lập một kết nối.
- Cuối cùng, cấu hình volumes ánh xạ index.html từ đĩa host tới container. Sau đó, bạn có thể tạo một index.html file với bất kỳ nội dung nào bạn muốn và đặt nó ở nơi Dockerfile và docker-compose.yml các tệp đã tồn tại.
Bây giờ đã đến lúc chúng ta chạy Docker container của chúng ta với Docker Compose. Chỉ cần chúng ta chạy docker-compose up.

Khi bạn chạy docker-compose up lệnh, Docker sẽ tải xuống các image cần thiết từ internet và cấu hình chúng theo hướng dẫn trong các tệp cấu hình của chúng tôi.
Để kiểm tra xem web server có đang chạy, hãy mở trình duyệt web, nhập địa chỉ IP VPS của bạn, và truy cập cổng 8080.

Lưu ý thêm, bạn có thể sử dụng docker-compose up -d để chạy container ở chế độ nền.
Truy Cập Logs bằng Docker Compose
Lúc này, web server của chúng ta đã sẵn sàng và đang hoạt động. Nó đang tạo log và lưu trữ thông tin này để sử dụng sau. Việc kiểm tra log của Docker Compose là cần thiết để khắc phục sự cố và giám sát. Nhưng làm cách nào để đọc những log này? Đó là lúc nhật ký docker-compose phát huy tác dụng. Hãy đảm bảo bạn đang ở thư mục chứa tệp cấu hình, rồi chạy lệnh đó.

Đôi khi, bạn muốn xem phiên bản trực tiếp của log khi chúng đang được tạo. Chỉ cần thêm -f vào cuối lệnh trước đó và chạy docker-compose logs -f.

Một số ứng dụng dựa trên Docker có thể không cung cấp dấu thời gian trong log của chúng. Do đó, bạn có thể sử dụng docker-compose logs -t để thêm thời gian ghi lại cho mỗi dòng log.

Log Docker cũng có thể hiển thị các mục gần nhất. Để làm điều này, hãy sử dụng docker-compose logs --tail 10 để xem 10 mục log mới nhất. Docker Compose logs tail của Docker, tương tự như docker logs tail, rất hữu ích khi bạn muốn nhanh chóng kiểm tra hoạt động gần đây mà không cần cuộn qua toàn bộ lịch sử log.

Mục đích chính của việc sử dụng Docker Compose là tạo các ứng dụng đa container. Do đó, bạn có thể cần đọc log của một dịch vụ cụ thể. Để làm điều này, hãy sử dụng docker-compose logs -f SERVICE, ghi nhớ để thay thế SERVICE với tên dịch vụ thực tế của bạn.

Ghi nhật ký Docker
Hệ sinh thái Docker có thể trở nên phức tạp hơn đối với các ứng dụng hội tụ, đặc biệt là trong các môi trường lớn. Như chúng ta đã biết, mỗi container tạo ra log. Do đó, một cơ chế gọi là Logging Driver chịu trách nhiệm tiếp nhận, gửi và lưu trữ log. Theo mặc định, Docker sử dụng các tệp JSON cho Logging Driver, nhưng nó cũng hỗ trợ nhiều driver khác, mỗi driver có những ưu và nhược điểm riêng.
Tất cả mọi người đều công nhận rằng log rất quan trọng trong nhiều lĩnh vực, bao gồm khắc phục sự cố và tăng cường hiệu suất hệ thống. Dưới đây, chúng tôi sẽ đề cập đến hai khía cạnh chính của việc sử dụng log container:
- Giám sát: Mục đích chính của logs là giám sát. Chúng thường cho thấy tình trạng tổng thể của các ứng dụng được containerize của chúng ta.
- Khắc phục sự cố: Khi gặp sự cố, logs giúp chúng ta phát hiện lỗi ứng dụng.
Vì docker logs và docker compose logs được tạo liên tục, chúng có thể lấp đầy toàn bộ bộ nhớ VPS. Do đó, chúng ta cần một chiến lược quản lý không gian đĩa gọi là Log Rotation Policy. Để tạo và sử dụng chính sách này, quay lại docker-compose.yml và mở nó. Sau đó, thêm một phần logging với cấu hình dưới đây:
version: '3.8' services: web: build: . ports: - "8080:80" volumes: - ./index.htm:/usr/share/nginx/html/index.htm logging: driver: json-file options: max-size: "200k" max-file: "10"
Bạn có thể liên tục điều chỉnh max-size và max-file theo nhu cầu của mình.
Mô Hình Phân Phối Docker Logs
Các kỹ sư có thể chọn một mô hình logging khác trong các môi trường nâng cao hơn so với các driver JSON mặc định, chẳng hạn như Syslog, fluentd, và các mô hình khác. Tuy nhiên, điều quan trọng là nhớ rằng driver JSON-file phù hợp cho hầu hết các kịch bản logging, và có thể không cần phải lệch khỏi chế độ mặc định.
Tùy thuộc vào kiến trúc ứng dụng hoặc yêu cầu của tổ chức, bạn có thể buộc phải sử dụng các giải pháp logging tập trung được gọi là Log Aggregators. Những dịch vụ này, bao gồm Elasticsearch, Logstash, Kibana, v.v., được thiết kế để nhận logs từ các nguồn khác nhau và hợp nhất, lưu trữ cũng như phân tích chúng ở một vị trí tập trung duy nhất.
Ngược lại, bạn nên lưu trữ logs của mình bằng các giải pháp lưu trữ tiết kiệm hơn. Xem xét tình huống trong đó VPS của bạn sử dụng bộ nhớ tốc độ cao và đắt tiền; sử dụng các tài nguyên cao cấp như vậy để lưu trữ logs mà bạn có thể chỉ cần dùng để tham khảo trong tương lai có thể không tiết kiệm.
Có rất nhiều mô hình logging khác nhau, mỗi mô hình có những ưu điểm và nhược điểm riêng. Điều cần thiết là đánh giá cẩn thận từng mô hình và chọn một mô hình dựa trên nhu cầu cụ thể của bạn.
Lấy cho mình một Linux VPS loại tiết kiệm hoặc cao cấp để lưu trữ trang web hoặc máy tính để bàn từ xa, với giá rẻ nhất hiện có. VPS Chạy trên Linux KVM để tăng hiệu quả và hoạt động trên phần cứng mạnh mẽ với bộ nhớ NVMe SSD để tăng tốc độ.
Đọc thêmKết luận
Hiểu rõ logs của Docker Compose là chìa khóa. Chúng giúp quản lý và gỡ lỗi các ứng dụng Docker của bạn một cách hiệu quả. Học cách truy cập và giám sát các logs này sẽ cải thiện khả năng giải quyết vấn đề và tăng cường hiệu suất cũng như bảo mật ứng dụng. Dù là phát triển hay quản trị hệ thống, sử dụng logs của Docker Compose là điều cần thiết. Chúng đảm bảo quản lý container của bạn hiệu quả.
Câu hỏi thường gặp
Làm cách nào để lọc Docker Compose logs theo thời gian?
Docker Compose không cung cấp phương pháp trực tiếp để lọc logs theo thời gian. Tuy nhiên, bạn có thể lọc logs bằng cách chuyển chúng qua grep để so khớp mẫu. Ví dụ, bạn có thể sử dụng: docker-compose logs | grep "2023-04-06", thay thế "2023-04-06" bằng ngày hoặc mẫu thời gian cụ thể mà bạn đang tìm kiếm.
Làm cách nào để dừng các container được khởi động bằng Docker Compose?
Điều hướng đến thư mục chứa tệp docker-compose.yml và chạy lệnh docker-compose down.
Làm cách nào để xóa các tập tin log theo cách thủ công?
Thay vì cấu hình log rotation trong tệp docker-compose.yml, bạn có thể xóa thủ công các tệp Docker JSON log từ /var/lib/docker/containers/<container_id>/. Trước khi làm vậy, bạn nên xác định ID container Docker bằng docker ps -a.
Có thể theo dõi Docker logs theo thời gian thực được không?
Có, bạn có thể. Để làm điều đó, bạn nên sử dụng lệnh docker logs cùng với tùy chọn -f hoặc --follow. Điều này sẽ theo dõi logs Docker cho bạn.