← Back to list

Docker Multi-Stage Build

Linkedin: Nicky Fajaelani

NickyFajaelani · 2026-08-21 04:06 · 0 claps · 1.7 min read
#docker #dockerfiles #multi-stage-builds #docker-multi-stage #docker-image
Open on Medium ↗
Wiki topics: ☁️ · DevOps & Cloud

Docker Multi-Stage Build

Linkedin: Nicky Fajaelani

Docker multi-stage build adalah teknik membuat image Docker yang lebih kecil dan aman dengan memakai lebih dari satu perintah From dalam satu Dockerfile. Tahap awal dipakai untuk merakit atau build aplikasi beserta seluruh alat beratnya, lalu hasil akhirnya disalin ke tahap berikut yang lebih ringan.

Cara Kerja:

  • Tahap Pertama (Builder): Memakai base image yang besar atau lengkap dengan perkakas koding (seperti compiler, SDK, atau node_modules yang besar) untuk mengompilasi atau merakit program.
  • Tahap Akhir (Production): Memakai base image yang sangat kecil dan bersih (seperti Alpine atau Scratch), lalu menyalin hasil file jadi (binary atau dist) dari tahap pertama. File sampah atau alat build ditinggal.

Keunggulan Utama:

  • Ukuran Jauh Lebih Kecil: Mengurangi ukuran file image secara drastis karena tidak membawa alat build yang tidak perlu.
  • Lebih Aman: Mengurangi celah keamanan (vulnerabilities) karena sedikitnya program atau dependensi bawaan di dalam container produksi.
  • Distribusi Cepat: Menghemat waktu saat push atau pull image ke server/registry

Praktik: Kita simulasikan dengan aplikasi Python super simpel

Buat folder dan beberapa file nya

mkdir -p ~/linux-practice/docker-demo/multistage && cd ~/linux-practice/docker-demo/multistage

cat > app.py << 'EOF'
print("Halo dari container!")
EOF

cat > requirements.txt << 'EOF'
requests
EOF

Buat versi tanpa single-stage (untuk perbandingan)

cat > Dockerfile.single << 'EOF'
FROM python:3.11
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
EOF

docker build -f Dockerfile.single -t demo-single .

Sekarang buat versi multi-stage

cat > Dockerfile.multi << 'EOF'
FROM python:3.11 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt

FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
CMD ["python", "app.py"]
EOF

docker build -f Dockerfile.multi -t demo-multi .

Lalu setelah keduanya berhasil di build, sekarang kita bandingkan ukuran images dari keduanya

docker images | grep demo

Coba perhatikan ukuran images yang ada antara single-stage dan multi-stage:

demo-single menggunakan FROM python:3.11 penuh sebagai base image final, semua compiler (gcc), build tools, header files, dan segala printilan yang dibutuhkan cuma untuk proses instalasi dependency, tapi tidak dibutuhkan sama sekali ketika aplikasi sudah jalan. Semua itu “nempel” terus di image final (1.61GB).

demo-multi hanya membawa hasil akhirnya saja python:3.11-slim (base yang sudah ramping) + folder .local (isinya hanya package Python yang memang digunakan di production) build tools yang tadi dipakai untuk instalasi ditinggal di stage builder, tidak di bawa ke image final (190MB).

Done!.


메타데이터
post_id
7299b2c1b8cd
slug
docker-multi-stage-build-7299b2c1b8cd
url
https://medium.com/@nickyfajaelani2/docker-multi-stage-build-7299b2c1b8cd
canonical_url
https://medium.com/@nickyfajaelani2/docker-multi-stage-build-7299b2c1b8cd
author_url
https://medium.com/@nickyfajaelani2
status
ok
fetched_at
2026-09-04 11:21:07