Docker Multi-Stage Build
Linkedin: Nicky Fajaelani
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