Kodeloka
  1. Kodeloka
  2. Kelas Docker
  3. Materi

Dockerfile ยท Modul 17 dari 21

CMD vs ENTRYPOINT & Multi-Stage Builds

Perbedaan CMD vs ENTRYPOINT, bentuk Shell vs Exec form, & teknik Multi-Stage Build untuk memperkecil ukuran image.

CMD vs ENTRYPOINT & Multi-Stage Builds

1. Perbedaan CMD vs ENTRYPOINT

  • CMD: Menentukan argumen/perintah default yang dapat ditimpa (overridden) dengan mudah saat docker run.
  • ENTRYPOINT: Menentukan executable utama kontainer yang tetap dieksekusi sebagai biner utama.
# Kombinasi Praktis Terbaik:
ENTRYPOINT ["node"]
CMD ["app.js"]

# Jika dijalankan 'docker run my-image', eksekusi: node app.js
# Jika dijalankan 'docker run my-image test.js', eksekusi: node test.js

2. Multi-Stage Builds (Teknik Emas Produksi)

Dalam bahasa seperti Go, Rust, Java, atau Angular/React, kita membutuhkan SDK/Compiler yang besar saat build time, tetapi saat runtime produksi hanya membutuhkan file biner hasil kompilasi.

**Multi-Stage Build** memungkinkan penggunaan beberapa instruksi FROM dalam 1 Dockerfile untuk membuang seluruh alat compiler dan menghasilkan image produksi super kecil (beberapa MB saja)!

# Stage 1: Build Phase
FROM golang:1.26-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o main-app .

# Stage 2: Production Phase (Minimal Image)
FROM alpine:latest
WORKDIR /root/
# Salin HANYA file biner dari stage builder
COPY --from=builder /app/main-app .
EXPOSE 8080
CMD ["./main-app"]
๐Ÿ“ˆ Hasil Optimasi: Ukuran image berkurang drastis dari **800 MB** (Golang SDK) menjadi hanya **15 MB** (Alpine + Binary)!