Advertisement

Mengoptimalkan Dockerfile untuk Ukuran Image yang Lebih Kecil – Docker Tanpa Gembrot!

 File:Docker (container engine) logo.svg


“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!

 

Post a Comment

0 Comments