0Pricing
Docker & DevOps Fundamentals · Lekcja

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-slim

Kompromisy 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
*.log

Podsumowanie 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 /app

Poznaj 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:latest

Przypinanie 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-slim

Szybkie sprawdzenie

Co wyróżnia obraz distroless?

Podsumowanie

Można już znacząco zmniejszać obrazy:

  • Należy wybierać bazy -slim, -alpine, distroless lub scratch
  • Łączyć i czyścić warstwy RUN oraz używać .dockerignore
  • Budowanie wieloetapowe usuwa łańcuch narzędzi z obrazu końcowego
  • Mierzyć rozmiary za pomocą docker history i 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

  1. Wielostopniowe kompilacje zwiększające wydajność
  2. Wykorzystanie pamięci podręcznej kompilacji
  3. Najlepsze praktyki bezpieczeństwa Dockerfile
  4. Minimalizowanie rozmiaru obrazu za pomocą baz Slim i Distroless
← Powrót do Docker & DevOps Fundamentals