Build Multi-Tahap untuk Efisiensi
Manfaatkan build multi-tahap untuk membuat image produksi yang lebih kecil dan aman dengan memisahkan dependensi build dan runtime.
Build Multi-Tahap untuk Efisiensi adalah pelajaran DevOps Bootcamp gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar DevOps Bootcamp, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus DevOps Bootcamp mencakup 4 pelajaran total.
Pengantar Build Multi-Tahap
Selamat datang di optimasi Dockerfile tingkat lanjut! Hari ini, kita akan mempelajari build multi-tahap, teknik ampuh untuk membuat image Docker yang lebih kecil dan efisien.
Image yang lebih kecil menghasilkan pengunduhan yang lebih cepat, keamanan yang lebih baik, dan pemanfaatan sumber daya yang lebih optimal.

Mengapa Ukuran Image yang Lebih Kecil Penting
Saat Anda membangun image Docker, image tersebut sering kali menyertakan alat dan dependensi yang hanya diperlukan selama proses build, bukan saat aplikasi akhir dijalankan.
- Pengambilan lebih cepat: Image yang lebih kecil diunduh lebih cepat.
- Lebih sedikit ruang disk: Menghemat penyimpanan di registri dan host.
- Permukaan serangan lebih kecil: Lebih sedikit komponen berarti lebih sedikit potensi kerentanan.
- Keamanan lebih baik: Image produksi Anda hanya berisi hal-hal yang penting.
Masalah Build Satu Tahap
Bayangkan aplikasi terkompilasi, seperti aplikasi yang ditulis dalam Go. Dockerfile satu tahap tradisional akan menyertakan seluruh kompiler Go dan dependensi pengembangan di dalam image akhir.
Hal ini membuat image akhir jauh lebih besar dari yang diperlukan, karena kompiler tidak diperlukan untuk menjalankan biner yang telah dikompilasi.
Contoh Satu Tahap (Go)
Berikut aplikasi Go sederhana dan Dockerfile yang membangunnya dalam satu tahap. Perhatikan bahwa lingkungan build disertakan dalam image akhir.
main.go:
package main
import "fmt"
func main() {
fmt.Println("Hello from Single-Stage Docker!")
}Dockerfile Satu Tahap
Dockerfile ini menggunakan `golang:1.21-alpine` sebagai basisnya. Setelah aplikasi dibangun, image basis yang besar ini, beserta semua alat build-nya, tetap berada di dalam image akhir.
FROM golang:1.21-alpine
WORKDIR /app
COPY main.go .
RUN go build -o myapp main.go
EXPOSE 8080
CMD ["./myapp"]Anatomi Build Multi-Tahap
Build multi-tahap mengatasi masalah ini dengan memungkinkan Anda mendefinisikan beberapa instruksi `FROM` dalam satu Dockerfile. Setiap `FROM` memulai tahapan build baru.
- Gunakan kata kunci
ASuntuk memberi nama tahapan (misalnya,FROM golang:1.21-alpine AS builder). - Selanjutnya, Anda dapat menyalin artefak dari tahapan sebelumnya menggunakan
COPY --from=<stage_name>.
Hanya tahapan terakhir yang disimpan sebagai image.
Struktur Multi-Tahap
Dockerfile multi-tahap biasanya memiliki setidaknya dua tahapan:
- Tahap Build: Berisi semua alat dan kode sumber yang diperlukan untuk mengompilasi aplikasi Anda.
- Tahap Runtime: Image basis minimal yang hanya menyertakan aplikasi terkompilasi dan dependensi runtime-nya.
Image perantara dari tahap build dibuang sehingga menghasilkan image akhir yang ringan.
Contoh Multi-Tahap (Go)
Mari kita tulis ulang Dockerfile aplikasi Go menggunakan pendekatan multi-tahap. Kita akan membangun aplikasi pada tahap pertama, lalu menyalin hanya biner yang telah dikompilasi ke image basis `alpine` yang jauh lebih kecil.
# Stage 1: Build the application
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY main.go .
RUN go build -o myapp main.go
# Stage 2: Create the final lightweight image
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp .
EXPOSE 8080
CMD ["./myapp"]Menjalankan Build Multi-Tahap
Saat Anda membangun Dockerfile ini, Docker menjalankan setiap tahapan. Namun, hanya konten dari instruksi `FROM` terakhir, yang digabungkan dengan file yang disalin dari tahapan sebelumnya, yang membentuk image akhir.
Hasilnya adalah image yang jauh lebih kecil dibandingkan build satu tahap, karena kompiler Go dan alat build tidak disertakan.
Manfaat Build Multi-Tahap
Build multi-tahap sangat berguna untuk:
- Bahasa Terkompilasi: Go, Java, C++, Rust.
- Kerangka Kerja Frontend: Membangun aplikasi React/Angular dan menyajikan aset statis dengan Nginx.
- Aplikasi Node.js: Menginstal `node_modules` pada tahap build, lalu hanya menyalin `package.json`, `package-lock.json`, dan aplikasi yang telah dibangun ke image runtime yang ramping.
Periksa Pengetahuan Anda
Manakah dari pilihan berikut yang merupakan manfaat utama penggunaan build Docker multi-tahap?
Rangkuman: Efisiensi Multi-Tahap
Anda telah mempelajari build Docker multi-tahap!
- Build ini melibatkan beberapa instruksi
FROMdalam satu Dockerfile. - Kata kunci
ASmemberi nama pada tahapan, sedangkanCOPY --from=memindahkan artefak. - Manfaat utamanya adalah image akhir yang jauh lebih kecil, lebih aman, dan lebih efisien.
Teknik ini sangat penting untuk mengoptimalkan aplikasi Anda yang berjalan dalam kontainer. Selanjutnya, kita akan mempelajari pemanfaatan cache build!
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Build Multi-Tahap untuk Efisiensi” gratis?
Ya — teks lengkap “Build Multi-Tahap untuk Efisiensi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus DevOps Bootcamp, upgrade ke CoddyKit PRO. Kursus DevOps Bootcamp mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Build Multi-Tahap untuk Efisiensi”?
Manfaatkan build multi-tahap untuk membuat image produksi yang lebih kecil dan aman dengan memisahkan dependensi build dan runtime. Kamu berlatih DevOps Bootcamp dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai DevOps Bootcamp?
Tidak diperlukan pengalaman sebelumnya. DevOps Bootcamp di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Build Multi-Tahap untuk Efisiensi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran DevOps Bootcamp ini?
Ya. Setiap pelajaran DevOps Bootcamp menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Build Multi-Tahap untuk Efisiensi
- Memanfaatkan Caching Build
- Praktik Terbaik Keamanan Dockerfile
- Meminimalkan Ukuran Image dengan Basis Slim dan Distroless