“Kenapa Docker Image gue gede banget?” – Semua orang setelah build pertama.
Docker Image yang besar itu seperti koper saat mau liburan:
Muat banyak barang, tapi...
Berat banget dibawa kemana-mana.
Kalau kamu bikin Docker Image yang kegedean, akibatnya:
Build jadi lama
Deployment makin lambat
Storage cepat penuh
Solusinya? OPTIMASI!
Di artikel ini, kita bakal bahas:
Kenapa Docker Image bisa jadi besar?
Cara mengoptimalkan Dockerfile biar lebih ramping
Strategi multi-stage build
Menggunakan base image yang lebih kecil
Menghapus layer yang nggak perlu
Trik .dockerignore
untuk mengurangi ukuran
Siap dietin Docker Image kamu? Ayo mulai!
1. Kenapa Docker Image Bisa Jadi Gede Banget?
Ada beberapa alasan kenapa Docker Image kamu bisa membengkak:
Gunakan base image yang salah → Misalnya ubuntu
bisa lebih besar dari alpine
.
Terlalu banyak layer yang nggak perlu → Misalnya, terlalu banyak RUN
dalam Dockerfile.
File cache yang nggak dibersihin → Contoh: apt-get update
tapi nggak dihapus cache-nya.
Meng-copy semua file proyek ke dalam container → Termasuk node_modules
, .git
, dll.
Solusi: Perbaiki cara kamu menulis Dockerfile!
2. Gunakan Base Image yang Lebih Ringan
Base image itu kayak "pondasi" Docker Image kamu. Pilih yang ringan supaya nggak terlalu besar.
Base Image | Ukuran Kira-kira |
---|---|
ubuntu |
~29 MB |
debian |
~22 MB |
alpine |
~5 MB |
Contoh perbandingan:
# Base image gede
FROM ubuntu:latest
# Base image ringan
FROM alpine:latest
Gunakan alpine
kalau memungkinkan!
3. Susun Layer dalam Dockerfile dengan Benar
Docker Image dibangun dari layer-layer. Setiap perintah dalam Dockerfile akan membuat layer baru.
Contoh Dockerfile yang salah (image lebih besar & lambat):
FROM node:18
WORKDIR /app
COPY . .
RUN npm install
Dockerfile yang lebih optimal:
FROM node:18-alpine
WORKDIR /app
COPY package.json package-lock.json .
RUN npm install
COPY . .
Kenapa ini lebih bagus?
COPY package.json
lebih dulu → npm install
cuma jalan kalau ada perubahan di package.json
.
Pemisahan proses install dan copy kode bisa memanfaatkan caching.
4. Hapus Cache dan File yang Nggak Perlu
Setiap kali install paket di Linux, cache harus dibersihin biar nggak menambah ukuran Docker Image.
Contoh yang salah:
RUN apt-get update && apt-get install -y curl
Contoh yang benar:
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
Menghapus cache setelah install akan mengurangi ukuran image!
5. Gunakan Multi-Stage Build untuk Image Lebih Ringan
Masalah:
Biasanya, kalau kita bikin aplikasi seperti Node.js atau Go, kita perlu dependency saat build, tapi dependency ini nggak diperlukan di runtime!
Solusi: Gunakan Multi-Stage Build!
Contoh Dockerfile tanpa Multi-Stage Build (GEMUK):
FROM node:18-alpine
WORKDIR /app
COPY . .
RUN npm install
CMD ["node", "server.js"]
Image ini bakal membawa semua dependency termasuk yang nggak dibutuhkan di production!
Dockerfile dengan Multi-Stage Build (LEBIH RAMPING! )
# Tahap build (hanya untuk install dependency)
FROM node:18-alpine AS builder
WORKDIR /app
COPY package.json package-lock.json .
RUN npm install
# Tahap runtime (lebih kecil)
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
CMD ["node", "server.js"]
Keuntungan Multi-Stage Build:
Layer pertama hanya untuk build (hapus setelah selesai)
Layer kedua hanya membawa yang dibutuhkan
Ukuran Docker Image jadi lebih kecil
6. Gunakan .dockerignore
untuk Menghindari File yang Nggak Perlu
Masalah:
Docker secara default akan meng-copy SEMUA file di proyek ke dalam container, termasuk node_modules
, .git
, dan file sampah lainnya.
Solusinya? Gunakan .dockerignore
!
Buat file .dockerignore
di root proyek:
node_modules
.git
.env
.DS_Store
Docker hanya akan meng-copy file yang benar-benar dibutuhkan!
7. Gunakan --squash
untuk Menggabungkan Layer
Kadang setelah banyak revisi, image tetap besar karena layer-layer sebelumnya masih ada.
Gunakan flag --squash
:
docker build --squash -t my-optimized-app .
Menggabungkan layer-layer kecil menjadi satu, hasilnya lebih ramping!
Catatan:
--squash
butuh Docker experimental features diaktifkan.
8. Cek Ukuran Docker Image Kamu!
Gunakan perintah ini untuk melihat ukuran masing-masing image:
docker images
Atau untuk melihat ukuran layer secara detail:
docker history my-image
Pastikan hasil optimasi kamu berhasil!
9. Kesimpulan: Dietin Docker Image Itu Gampang!
Ringkasan tips optimasi Docker Image:
Gunakan base image yang lebih kecil (contoh: alpine
).
Susun perintah dalam Dockerfile dengan benar untuk memanfaatkan caching.
Bersihkan cache dan file yang nggak perlu setelah install package.
Gunakan Multi-Stage Build supaya runtime image lebih kecil.
Gunakan .dockerignore
untuk menghindari file sampah ikut ke dalam image.
Gunakan --squash
untuk menggabungkan layer jadi lebih ramping.
Sekarang giliran kamu!
Coba optimasi Dockerfile kamu dan lihat berapa persen ukuran image bisa dipangkas!
0 Comments