tips menggunakan docker multi-stage build untuk image lebih kecil",
Tips Menggunakan Docker Multi-Stage Build untuk Image Lebih Kecil
Pernah nggak sih bikin Docker image terus ukurannya gede banget sampai ratusan MB atau bahkan GB? Padahal aplikasinya cuma sederhana. Nah, salah satu solusi yang bisa kamu pakai adalah multi-stage build. Teknik ini bisa bikin ukuran image Docker kamu jadi jauh lebih ramping dan efisien.
Apa Itu Multi-Stage Build?
Multi-stage build adalah fitur Docker yang memungkinkan kamu menggunakan beberapa tahap (stage) dalam satu Dockerfile. Intinya, kamu bisa pakai satu stage untuk compile atau build aplikasi, terus stage berikutnya cuma ambil hasil build-nya aja tanpa perlu bawa-bawa tools yang nggak diperlukan saat runtime.
Kenapa Harus Pakai Multi-Stage Build?
Bayangin kamu build aplikasi Go atau Java. Kamu butuh compiler, dependencies, dan berbagai tools untuk proses build. Tapi saat aplikasi sudah jadi binary atau JAR file, semua tools itu nggak diperlukan lagi. Dengan multi-stage build, kamu bisa buang semua "sampah" build tools itu dan cuma simpan aplikasi final-nya aja.
Tips Praktis Implementasi
- Pisahkan stage build dan runtime - Stage pertama untuk compile aplikasi dengan semua dependencies yang dibutuhkan. Stage kedua pakai base image yang lebih kecil seperti alpine atau distroless, terus copy hasil build dari stage pertama.
- Gunakan base image yang tepat - Untuk stage build, pakai image yang lengkap seperti node:18 atau golang:1.21. Untuk stage runtime, pilih yang minimal seperti node:18-alpine atau scratch untuk Go binary.
- Copy hanya yang diperlukan - Jangan copy semua folder. Gunakan COPY --from untuk ambil file spesifik yang benar-benar dibutuhkan saat runtime. Misalnya cuma binary executable atau folder dist hasil build.
- Manfaatkan layer caching - Letakkan perintah yang jarang berubah di atas, seperti instalasi dependencies. Copy source code di bagian bawah supaya rebuild lebih cepat kalau cuma code yang berubah.
- Bersihkan cache build - Tambahkan flag seperti --no-cache untuk npm atau go build dengan flag yang menghasilkan binary lebih kecil. Hapus file temporary yang nggak diperlukan.
Hasil yang Bisa Kamu Dapatkan
Dengan menerapkan multi-stage build, ukuran image bisa turun drastis. Image Node.js yang tadinya 1GB bisa jadi cuma 100-200MB. Image Go bahkan bisa di bawah 10MB kalau pakai scratch image. Selain hemat storage, image yang lebih kecil juga lebih cepat di-pull dan di-deploy.
Jadi, mulai sekarang coba deh terapkan multi-stage build di project Docker kamu. Selain bikin image lebih ringan, kamu juga ikut menerapkan best practice dalam containerization. Happy coding!