0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Cách Xây Dựng Dockerfile Hiệu Quả và Dễ Bảo Trì: Hướng Dẫn Chi Tiết

Đăng vào 5 tháng trước

• 3 phút đọc

Chủ đề:

Docker

Cách Xây Dựng Dockerfile Hiệu Quả và Dễ Bảo Trì

Một Dockerfile được tối ưu tốt không chỉ mang lại hình ảnh Docker gọn nhẹ mà còn giúp tăng tốc độ build và dễ dàng bảo trì.
Bài viết này sẽ giới thiệu các bí quyết để xây dựng Dockerfile hiệu quả nhằm giảm thiểu kích thước, cải thiện bảo mật và tăng tính khả thi của ứng dụng.

1. Chọn Image Nền Tối Giản

Bắt đầu với một image nền tối giản là chiến lược đầu tiên bạn nên áp dụng. Thay vì chọn những image lớn như Ubuntu hoặc Debian, hãy lựa chọn Alpine hoặc các phiên bản slim khác. Điều này giúp giảm kích thước và tăng cường hiệu suất.

Ví dụ:

dockerfile Copy
FROM node:16-alpine

Sử dụng image nền gọn nhẹ giúp tốc độ build nhanh hơn và tiết kiệm tài nguyên khi chạy ứng dụng.

2. Tối Ưu Hóa Lớp Cache

Docker lưu trữ từng layer trong quá trình build, bạn nên sắp xếp các chỉ thị sao cho hợp lý. Đặt các chỉ thị ít thay đổi thường xuyên ở đầu và những chỉ thị thay đổi thường xuyên xuống cuối.

Phương pháp hay nhất:

  • Cài đặt dependency trước
  • Sao chép các file tĩnh (như package.json, requirements.txt) sớm
  • Sao chép mã nguồn sau cùng
dockerfile Copy
COPY package.json /app/
WORKDIR /app
RUN npm install
COPY . /app/

3. Tránh Cài Đặt Gói Không Cần Thiết

Chỉ cài đặt những gói cần thiết giúp làm giảm kích thước image. Tránh cài đặt các tiện ích không cần thiết như curl, git hoặc vim.

dockerfile Copy
RUN apk add --no-cache bash

Sử dụng tùy chọn --no-cache để ngăn Docker lưu trữ các file index gói, tiết kiệm dung lượng.

4. Giảm Số Lượng Layer

Mỗi chỉ thị Dockerfile tạo ra một layer, vì vậy hãy cố gắng kết hợp nhiều lệnh thành một layer để giảm kích thước.

Ví dụ về cách nào để giảm số lượng layer:

dockerfile Copy
RUN apt-get update && apt-get install -y curl vim git

5. Sử Dụng .dockerignore

Tương tự như .gitignore, bạn nên tạo file .dockerignore để loại trừ các file không cần thiết trong quá trình build.

Nội dung mẫu cho .dockerignore:

Copy
node_modules/
.git/
*.log

6. Tận Dụng Multi-Stage Builds

Kỹ thuật multi-stage builds cho phép bạn tách việc build ứng dụng khỏi image cuối cùng, nhờ đó giảm kích thước image một cách đáng kể.

Ví dụ:

dockerfile Copy
FROM node:16-alpine AS build
WORKDIR /app
COPY package.json package-lock.json /app/
RUN npm install
COPY . /app/
RUN npm run build

FROM node:16-alpine
WORKDIR /app
COPY --from=build /app/dist /app/dist
CMD ["node", "dist/server.js"]

7. Sử Dụng Thẻ Phiên Bản Cụ Thể

Tránh sử dụng thẻ latest khi chọn image nền. Hãy đảm bảo lựa chọn phiên bản cụ thể để giữ ổn định cho các lần build.

dockerfile Copy
FROM node:16-alpine

8. Giảm Thiểu Việc Sử Dụng Các Chỉ Thị RUN

Hãy tối ưu hóa số lượng chỉ thị RUN để giảm thời gian build và kích thước image. Kết hợp nhiều lệnh thành một chỉ thị duy nhất.

9. Sử Dụng Người Dùng Không Phải Root

Chạy container với tư cách root có thể tiềm ẩn nhiều rủi ro bảo mật. Tạo một người dùng không phải root để nâng cao bảo mật.

dockerfile Copy
RUN adduser --disabled-password myuser
USER myuser

10. Thiết Lập Biến Môi Trường Rõ Ràng

Sử dụng chỉ thị ENV để thiết lập rõ ràng biến môi trường, điều này giúp cấu hình ứng dụng một cách dễ dàng.

dockerfile Copy
ENV NODE_ENV production
ENV PORT 3000

Kết Luận

Việc áp dụng các phương pháp hay nhất trong Dockerfile không chỉ giúp bạn tạo ra hình ảnh Docker hiệu quả và dễ bảo trì mà còn đảm bảo an toàn cho ứng dụng của bạn. Bằng cách tối ưu hóa image nền, sử dụng multi-stage builds, và chuyển sang người dùng không phải root, bạn sẽ tạo ra những image Docker nhanh chóng, tin cậy và an toàn.

Hãy áp dụng ngay những bí quyết này vào dự án của bạn để tận dụng tối đa sức mạnh của Docker.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào