0Pricing
Go Academy · Lekcja

Wieloetapowe kompilacje Dockera dla Go

Etap buildera oraz końcowy obraz scratch/alpine

Wieloetapowe kompilacje Dockera dla Go to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.

Dlaczego wiele etapów?

Jednoetapowe budowanie, które kompiluje kod Go, tworzy duży obraz zawierający cały łańcuch narzędzi Go. Budowanie wieloetapowe kompiluje kod w jednym etapie, a następnie kopiuje tylko plik binarny do minimalnego obrazu końcowego.

Podstawowy wieloetapowy plik Dockerfile

Etap budowania kompiluje plik binarny, a etap końcowy kopiuje go do minimalnej bazy:

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

Obraz FROM scratch nie zawiera niczego — ani powłoki, ani bibliotek systemu operacyjnego. Plik binarny Go musi być połączony statycznie (CGO_ENABLED=0) i jawnie zawierać wszystkie potrzebne pliki.

FROM distroless

Obrazy Google distroless zapewniają minimalny zestaw bibliotek systemu operacyjnego (certyfikaty CA, dane stref czasowych) bez powłoki — są bezpieczniejsze niż scratch w przypadku plików binarnych wymagających libc lub certyfikatów TLS.

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

FROM alpine dla powłoki

Alpine należy użyć jako końcowej bazy, gdy potrzebna jest powłoka do debugowania lub gdy plik binarny korzysta z CGO. Alpine dodaje około 5 MB, ale zawiera powłokę i menedżer pakietów.

Buforowanie warstw dla go.mod

Najpierw należy skopiować go.mod i go.sum oraz uruchomić go mod download, a dopiero potem skopiować kod źródłowy. Ta warstwa jest buforowana do momentu zmiany zależności, co przyspiesza ponowne budowanie.

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

-ldflags="-s -w"

-s usuwa tablicę symboli, a -w usuwa informacje debugowania DWARF. Razem zmniejszają rozmiar pliku binarnego o 30–50% bez wpływu na działanie w czasie wykonywania.

Argumenty budowania

Za pomocą ARG można wstrzyknąć informacje o wersji podczas budowania:

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

Użytkownik niebędący rootem

Ze względów bezpieczeństwa plik binarny należy uruchamiać jako użytkownik niebędący rootem. Można dodać użytkownika w obrazie bazowym albo użyć tagu nonroot obrazu distroless:

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

Rozmiar obrazu końcowego

Typowy plik binarny Go z obrazu scratch ma rozmiar 5–20 MB. Alpine dodaje około 5 MB. Pełny obraz golang ma około 800 MB. Budowanie wieloetapowe znacząco zmniejsza powierzchnię ataku i czas pobierania obrazu.

.dockerignore

Należy dodać plik .dockerignore, aby wykluczyć pliki z kontekstu budowania: vendor/, .git/, *.test, *.prof. Przyspiesza to budowanie obrazu Docker i zapobiega dołączaniu poufnych plików.

.git
vendor
*.test
*.prof
.env

Szybkie sprawdzenie

Dlaczego podczas budowania pliku binarnego Go dla obrazu Docker FROM scratch trzeba ustawić CGO_ENABLED=0?

Podsumowanie: wieloetapowe budowanie obrazów Docker

Najważniejsze informacje:

  • Etap budowania: obraz golang; etap końcowy: scratch/distroless/alpine
  • CGO_ENABLED=0 dla pliku binarnego połączonego statycznie (wymagane w przypadku scratch)
  • Najpierw kopiować go.mod, aby buforować warstwy; używać -ldflags="-s -w", aby zmniejszyć plik binarny
  • .dockerignore do wykluczania .git, vendor i plików testowych

Często zadawane pytania

Czy lekcja „Wieloetapowe kompilacje Dockera dla Go” jest bezpłatna?

Tak — pełny tekst „Wieloetapowe kompilacje Dockera dla Go” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wieloetapowe kompilacje Dockera dla Go”?

Etap buildera oraz końcowy obraz scratch/alpine Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Go Academy?

Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Wieloetapowe kompilacje Dockera dla Go”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?

Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Wieloetapowe kompilacje Dockera dla Go
  2. Konfiguracja środowiska i sekrety
  3. Docker Compose w lokalnym środowisku programistycznym
  4. Kontrole kondycji i dostrajanie produkcyjne
← Powrót do Go Academy