Alpine nhỏ (~5 MB) nhưng dùng musl libc thay vì glibc, và đó là nguồn gốc phần lớn sự cố:
- Native module không có prebuilt binary cho musl — Node phải biên dịch lại từ source (cần thêm
python3,make,g++), build lâu và dễ lỗi. - Python: wheel nhị phân trên PyPI build theo chuẩn manylinux/glibc, không dùng được trên musl → pip biên dịch lại từ source, image build chậm hơn nhiều và cuối cùng có khi còn lớn hơn bản
slim. - Một số khác biệt runtime khác: DNS resolver,
getaddrinfo, stack size mặc định của thread nhỏ hơn.
Lựa chọn thực tế:
| Base | Khi dùng |
|---|---|
-slim (Debian) | Mặc định an toàn cho Node/Python — glibc, wheel/prebuilt chạy được |
alpine | Go, Rust hoặc binary tĩnh; app đơn giản không có native dep |
distroless | Chỉ có runtime, không shell/package manager — bề mặt tấn công nhỏ nhất, nhưng khó debug |
Ưu tiên chọn theo rủi ro vận hành, không chỉ theo số MB.