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:nonrootRozmiar 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
.envSzybkie 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
- Wieloetapowe kompilacje Dockera dla Go
- Konfiguracja środowiska i sekrety
- Docker Compose w lokalnym środowisku programistycznym
- Kontrole kondycji i dostrajanie produkcyjne