0Pricing
Go Academy · Pelajaran

Build Docker Multitahap untuk Go

Tahap builder dengan image akhir scratch/alpine

Build Docker Multitahap untuk Go adalah pelajaran Go Academy 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 Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

Mengapa bertahap?

Build satu tahap yang mengompilasi kode Go menghasilkan image besar dengan seluruh toolchain Go. Build bertahap melakukan kompilasi dalam satu tahap dan hanya menyalin biner ke image akhir yang minimal.

Dockerfile bertahap dasar

Tahap build mengompilasi biner; tahap akhir menyalinnya ke basis minimal:

FROM golang:1.22-alpine AS build
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o myapp ./cmd/server

FROM scratch
COPY --from=build /app/myapp /myapp
COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
ENTRYPOINT ["/myapp"]

FROM scratch

Image FROM scratch tidak berisi apa pun — tanpa shell dan tanpa pustaka sistem operasi. Biner Go harus ditautkan secara statis (CGO_ENABLED=0) dan menyertakan semua berkas yang diperlukan secara eksplisit.

FROM distroless

Image distroless milik Google menyediakan pustaka sistem operasi minimal (sertifikat CA, data zona waktu) tanpa shell — lebih aman daripada scratch untuk biner yang memerlukan libc atau sertifikat TLS.

FROM gcr.io/distroless/static-debian12
COPY --from=build /app/myapp /
ENTRYPOINT ["/myapp"]

FROM alpine untuk shell

Gunakan Alpine sebagai basis akhir jika Anda memerlukan shell untuk penelusuran kesalahan atau jika biner menggunakan CGO. Alpine menambah sekitar 5 MB, tetapi menyertakan shell dan pengelola paket.

Penyimpanan layer untuk go.mod

Salin go.mod dan go.sum terlebih dahulu, lalu jalankan go mod download sebelum menyalin kode sumber. Layer ini disimpan dalam cache sampai dependensi berubah, sehingga pembangunan ulang menjadi lebih cepat.

COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build ...

-ldflags="-s -w"

-s menghapus tabel simbol; -w menghapus informasi penelusuran kesalahan DWARF. Bersama-sama, keduanya mengurangi ukuran biner sebesar 30–50% tanpa memengaruhi saat program berjalan.

Argumen build

Gunakan ARG untuk menyisipkan informasi versi saat build:

ARG VERSION=dev
RUN go build -ldflags="-X main.version=${VERSION}" -o myapp .

Pengguna non-root

Jalankan biner sebagai pengguna non-root demi keamanan. Tambahkan pengguna dalam image dasar atau gunakan tag nonroot milik distroless:

FROM gcr.io/distroless/static-debian12:nonroot

Ukuran image akhir

Biner Go biasa dari scratch berukuran 5–20 MB. Alpine menambah sekitar 5 MB. Image golang lengkap berukuran sekitar 800 MB. Build bertahap secara signifikan mengurangi permukaan serangan dan waktu pengunduhan image.

.dockerignore

Tambahkan .dockerignore untuk mengecualikan berkas dari konteks build: vendor/, .git/, *.test, *.prof. Ini mempercepat build Docker dan mencegah berkas sensitif ikut disertakan.

.git
vendor
*.test
*.prof
.env

Pemeriksaan Singkat

Mengapa CGO_ENABLED=0 harus diatur saat membangun biner Go untuk image Docker FROM scratch?

Rangkuman: Build Docker Bertahap

Poin utama:

  • Tahap build: image golang; tahap akhir: scratch/distroless/alpine
  • CGO_ENABLED=0 untuk biner statis (wajib untuk scratch)
  • Salin go.mod terlebih dahulu untuk penyimpanan layer; -ldflags="-s -w" untuk biner yang lebih kecil
  • .dockerignore untuk mengecualikan .git, vendor, dan berkas pengujian

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Build Docker Multitahap untuk Go” gratis?

Ya — teks lengkap “Build Docker Multitahap untuk Go” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Build Docker Multitahap untuk Go”?

Tahap builder dengan image akhir scratch/alpine Kamu berlatih Go Academy 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 Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go Academy 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 Docker Multitahap untuk Go” 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 Go Academy ini?

Ya. Setiap pelajaran Go Academy 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

  1. Build Docker Multitahap untuk Go
  2. Konfigurasi Lingkungan dan Rahasia
  3. Docker Compose untuk Pengembangan Lokal
  4. Pemeriksaan Kesehatan dan Penyetelan Produksi
← Kembali ke Go Academy