Minimalizowanie rozmiaru obrazu za pomocą baz Slim i Distroless
Zmniejszaj obrazy końcowe, wybierając minimalne obrazy bazowe, usuwając narzędzia budowania i używając baz distroless lub scratch, aby przyspieszyć pobieranie oraz zmniejszyć powierzchnię ataku.
Minimalizowanie rozmiaru obrazu za pomocą baz Slim i Distroless to bezpłatna lekcja Docker & DevOps Fundamentals na CoddyKit. To lekcja 4 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 Docker & DevOps Fundamentals, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Docker & DevOps Fundamentals zawiera 4 lekcji w sumie.
Dlaczego rozmiar obrazu ma znaczenie
Mniejsze obrazy pobierają się szybciej, szybciej się uruchamiają, kosztują mniej w przechowywaniu i udostępniają atakującym mniej pakietów. Optymalizacja rozmiaru poprawia zarówno wydajność, jak i bezpieczeństwo.
Wybór lekkiej bazy
Domyślne obrazy są wygodne, ale ciężkie. Zamiana node:20 (około 1 GB) na node:20-slim lub node:20-alpine może natychmiast zmniejszyć obraz o setki megabajtów.
FROM node:20-slimKompromisy związane z Alpine
Alpine jest niewielki, ale używa musl libc zamiast glibc, co czasami powoduje problemy z natywnymi plikami binarnymi. Należy dokładnie testować obrazy — niekiedy -slim jest bezpieczniejszą małą opcją.
FROM python:3.12-alpineŁączenie warstw RUN
Każde polecenie RUN dodaje warstwę. Należy łączyć powiązane polecenia i sprzątać w tej samej warstwie, ponieważ w przeciwnym razie usunięte pliki nadal powiększają wcześniejszą warstwę.
RUN apt-get update \
&& apt-get install -y curl \
&& rm -rf /var/lib/apt/lists/*Używanie .dockerignore
Plik .dockerignore wyklucza niepotrzebne elementy z kontekstu budowania: node_modules, .git i dzienniki. Mniejszy kontekst oznacza szybsze kompilacje i mniejsze warstwy.
# .dockerignore
.git
node_modules
*.logPodsumowanie budowania wieloetapowego
Należy budować w jednym etapie, korzystając ze wszystkich kompilatorów, a następnie za pomocą COPY --from skopiować wyłącznie artefakt do czystego etapu końcowego. Łańcuch narzędzi nie trafia do finalnego obrazu.
FROM golang:1.22 AS build
WORKDIR /src
COPY . .
RUN go build -o app
FROM alpine:3.20
COPY --from=build /src/app /appPoznaj Distroless
Obrazy Distroless zawierają wyłącznie aplikację i jej środowisko uruchomieniowe — bez powłoki, menedżera pakietów i dodatkowych plików binarnych. Są niewielkie i trudniejsze do wykorzystania w ataku.
FROM gcr.io/distroless/static-debian12
COPY --from=build /src/app /app
ENTRYPOINT ["/app"]Brak powłoki to nie problem
Distroless nie zawiera powłoki, dlatego polecenia RUN i docker exec sh nie będą działać. Całą konfigurację należy wykonać we wcześniejszych etapach; gdy trzeba zajrzeć do środka, należy użyć tagu :debug.
Baza scratch
W przypadku w pełni statycznych plików binarnych (Go, Rust) FROM scratch dostarcza wyłącznie plik wykonywalny — całość często zajmuje zaledwie kilka megabajtów.
FROM scratch
COPY --from=build /src/app /app
ENTRYPOINT ["/app"]Mierzenie efektów
Należy użyć docker images do porównania rozmiarów oraz docker history do sprawdzenia, które warstwy są największe. W pierwszej kolejności warto optymalizować najcięższe warstwy.
docker history myapp:latestPrzypinanie wersji zamiast latest
Przypięcie konkretnego tagu lub skrótu sprawia, że kompilacje są powtarzalne, i zapobiega nieoczekiwanym skokom rozmiaru, gdy zmieni się nadrzędny obraz latest.
FROM node:20.11.1-slimSzybkie sprawdzenie
Co wyróżnia obraz distroless?
Podsumowanie
Można już znacząco zmniejszać obrazy:
- Należy wybierać bazy
-slim,-alpine, distroless lubscratch - Łączyć i czyścić warstwy
RUNoraz używać.dockerignore - Budowanie wieloetapowe usuwa łańcuch narzędzi z obrazu końcowego
- Mierzyć rozmiary za pomocą
docker historyi przypinać wersje
Mniejsze obrazy oznaczają szybsze i bezpieczniejsze wdrożenia.
Często zadawane pytania
Czy lekcja „Minimalizowanie rozmiaru obrazu za pomocą baz Slim i Distroless” jest bezpłatna?
Tak — pełny tekst „Minimalizowanie rozmiaru obrazu za pomocą baz Slim i Distroless” 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 Docker & DevOps Fundamentals, przejdź na CoddyKit PRO. Kurs Docker & DevOps Fundamentals zawiera 4 lekcji w sumie.
Co nauczysz się w „Minimalizowanie rozmiaru obrazu za pomocą baz Slim i Distroless”?
Zmniejszaj obrazy końcowe, wybierając minimalne obrazy bazowe, usuwając narzędzia budowania i używając baz distroless lub scratch, aby przyspieszyć pobieranie oraz zmniejszyć powierzchnię ataku. Ćwiczysz Docker & DevOps Fundamentals 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ąć Docker & DevOps Fundamentals?
Nie wymagamy żadnego doświadczenia. Docker & DevOps Fundamentals 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 4 z 4.
Ile czasu zajmuje lekcja „Minimalizowanie rozmiaru obrazu za pomocą baz Slim i Distroless”?
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 Docker & DevOps Fundamentals?
Tak. Każda lekcja Docker & DevOps Fundamentals 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
- Wielostopniowe kompilacje zwiększające wydajność
- Wykorzystanie pamięci podręcznej kompilacji
- Najlepsze praktyki bezpieczeństwa Dockerfile
- Minimalizowanie rozmiaru obrazu za pomocą baz Slim i Distroless