Image có 2GB thôi, kéo lâu tí nhưng chạy ngon mà anh!– Ngon đâu không thấy, chỉ thấy CI/CD chậm như rùa!
Audit Docker image mà thấy image nặng 2GB chỉ để chạy API Node.js, tôi thắc mắc: “Sao không dùng Alpine mà lại kéo cả Ubuntu?”. Layer chồng chất, node_modules nằm trong image, deploy như tải cả Netflix về.
![]() |
| Docker image khi dev dùng Ubuntu và nhét node_modules! |
Image “béo phì”
Thực trạng:
- Base image sai: Dùng ubuntu thay vì alpine, nặng gấp 10 lần.
- Không multi-stage build: Tất cả build tools, cache, node_modules nhét vào image.
- Không audit: Dev không kiểm tra layer bằng docker history hay dive.
Hệ quả:
- Deploy chậm: Pull/push image mất hàng phút, CI/CD ì ạch.
- Tốn storage: Image nặng ngốn disk, cloud bill tăng.
- Rủi ro bảo mật: Layer thừa chứa dependency lỗi thời, dễ dính CVE.
Giải pháp: Tối ưu image
Để image “gọn nhẹ”:
- Dùng base image nhẹ: Chọn alpine hoặc distroless thay vì ubuntu.
- Multi-stage build: Tách build và runtime environment.
- Audit layer: Dùng dive <image> hoặc docker history để kiểm tra layer thừa.
Ví dụ: Multi-stage build cho Node.js
FROM node:18-alpine AS buildWORKDIR /appCOPY package*.json ./RUN npm ciCOPY . .RUN npm run build
FROM node:18-alpineWORKDIR /appCOPY --from=build /app/dist ./distCOPY package*.json ./RUN npm ci --productionCMD ["node", "dist/index.js"]🎯 Tóm lại: Image nặng là “gánh nặng” cho CI/CD. Dùng Alpine, multi-stage build, và audit layer để deploy nhanh, nhẹ, và tiết kiệm.

Đăng nhận xét