Docker là phần mềm container hóa phổ biến nhất, nhưng không phải ai cũng biết cách dùng nó hiệu quả. Những mẹo dưới đây sẽ giúp bạn phát huy tối đa sức mạnh của Docker.
Dùng Docker Image chính thức
Khi container hóa ứng dụng, bạn phải dùng Docker image. Bạn có thể xây dựng một image với cấu hình tùy biến hoặc dùng image chính thức của Docker.
Xây dựng image riêng đòi hỏi bạn phải tự tay xử lý toàn bộ cấu hình. Ví dụ, để xây dựng một image cho ứng dụng node.js, bạn phải tải node.js và các phần phụ thuộc của nó. Quá trình này tốn thời gian và có thể không mang lại tất cả cấu hình chính xác.
Docker khuyến khích dùng image node.js chính thức, với tất cả phần phụ thuộc chính xác. Image Docker có thước đo bảo mật tốt hơn, gọn nhẹ và đã được kiểm nghiệm cho nhiều môi trường khác nhau. Bạn có thể tìm image chính thức trên trang chính thống của Docker.
Dùng các phiên bản cụ thể của Docker Image
Thông thường, khi bạn tải một image chính thức, nó đi kèm với tag mới nhất đại diện cho phiên bản cao nhất của image đó. Mỗi lần bạn xây dựng một container từ image đó, nó là một phiên bản khác với container gần nhất.
Xây dựng với các phiên bản Docker image khác dễ khiến bạn gặp phải những hoạt động khó đoán trong ứng dụng. Các phiên bản có thể xung đột với những phần phụ thuộc khác, thậm chí còn khiến app bị lỗi.
Docker khuyên bạn bạn tải và xây dựng bằng những image của một phiên bản cụ thể. Các image chính thức cũng có tài liệu và bao gồm những trường hợp sử dụng phổ biến nhất.
Ví dụ, thay vì docker pull alpine, hãy dùng docker pull alpine:3.18.3. Docker sẽ lấy phiên bản cụ thể đó. Sau đó, bạn có thể dùng nó trong những bản dựng liên tiếp, giảm lỗi cho app của bạn. Bạn có thể tìm thấy những phiên bản cụ thể của image trên trang image Docker chính thức, trong Supported tags and respective Dockerfile links:
Quét image để tìm ra những lổ hổng bảo mật
Làm thế nào bạn biết một image muốn xây dựng không có lỗ hổng bảo mật? Bằng cách quét nó. Bạn có thể scan các image Docker bằng lệnh scan docker như sau:
docker scan [IMAGE]
Đầu tiên, bạn phải đăng nhập docker để quét một ảnh:
docker login
Sau đó, quét image cụ thể mà bạn muốn kiểm tra:
docker scan ubuntu:latest
Một công cụ tên Synk quét image này, liệt kê bất kỳ lỗ hổng theo mức độ nghiêm trọng. Bạn có thể thấy kiểu lỗ hổng và các liên kết tới thông tin về nó, bao gồm cách sửa chữa. Từ quá trình scan, bạn có thể biết image đó có đủ bảo mật cho ứng dụng hay không.
Dùng Docker Image kích thước nhỏ
Khi tải một Docker image, nó đi cùng với tất cả tiện ích hệ thống. Điều này tăng kích thước image với những công cụ bạn không cần.
Image Docker lớn “ngốn” dung lượng lưu trữ và có thể làm chậm thời gian chạy container. Chúng cũng có khả năng cao bị nhiều lỗ hổng bảo mật hơn.
Bạn có thể giảm kích thước của những image Docker bằng image Alpine. Những image Alpine gọn nhẹ và chỉ chứa những công cụ cần thiết. Chúng giảm không gian lưu trữ, khiến ứng dụng chạy nhanh và hiệu quả hơn.
Bạn sẽ tìm thấy một phiên bản Alpine cho hầu hết image chính thức trên Docker. Đây là một ví dụ của các phiên bản Alpine cho PostgreSQL:
Tối ưu hóa layer image lưu trữ
Mỗi lệnh trong Dockerfile đại diện cho một layer trên image. Những layer này có các tiện ích và chức năng khác nhau. Nếu nhìn vào những image chính thức trên Docker Hub, bạn sẽ thấy các hướng dẫn đã dùng để tạo chúng.
Dockerfile bao gồm mọi thứ bạn cần để tạo ảnh. Nó là một trong số những lí do tại sao nhiều lập trình viên thích Docker hơn máy ảo.
Đây là cấu trúc của một image Alpine ví dụ:
Khi xây dựng app dựa trên image, bạn đang thêm nhiều layer hơn cho image đó. Docker chạy các hướng dẫn trên Dockerfile từ trên xuống dưới, và nếu một layer thay đổi, Docker phải xây dựng lại các layer tiếp theo.
Phương pháp thực hành tốt nhất để sắp xếp Dockerfile từ những file thay đổi ít nhất tới thường xuyên nhất. Các hướng dẫn không thay đổi, như cài đặt, có thể ở phía trên cùng của file.
Khi bạn thay đổi file, Docker xây dựng từ những file đã thay đổi và lưu trữ những tệp chưa thay đổi nên phía trên nó. Vì thế, quá trình này chạy nhanh hơn.
Hãy nhìn vào ví dụ được minh họa ở ảnh trên. Nếu có thay đổi trong các file ứng dụng, Docker sẽ xây dựng từ đó. Nó không phải cài đặt lại gói npm.
Nếu xây dựng từ image này, quá trình sẽ chạy nhanh hơn việc tái xây dựng tất cả layer khác từ đầu. Lưu trữ cũng tăng tốc việc tải và đẩy image từ Docker Hub.
Trên đây là những mẹo dùng Docker tốt nhất. Hi vọng bài viết hữu ích với các bạn.