0Pricing
Docker & DevOps Fundamentals · Lekcja

Kompilacje wieloetapowe i mniejsze obrazy

Poznaj sposób, w jaki wieloetapowe pliki Dockerfile pozwalają dostarczać odchudzone obrazy produkcyjne przez oddzielenie narzędzi budowania od środowiska uruchomieniowego, znacznie zmniejszając rozmiar obrazu.

Kompilacje wieloetapowe i mniejsze obrazy 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

Duże obrazy wolniej się buduje, wysyła i pobiera, a ponadto mają większą powierzchnię ataku. Dobrym celem inżynierskim jest dostarczanie najmniejszego obrazu, na którym nadal działa aplikacja.

Problem nadmiarowych elementów

Budowanie aplikacji często wymaga kompilatorów, zależności deweloperskich i narzędzi do budowania. Jeśli trafią one do obrazu końcowego, znacznie zwiększą jego rozmiar — mimo że uruchomiona aplikacja ich nie potrzebuje.

Czym jest kompilacja wieloetapowa?

Kompilacja wieloetapowa wykorzystuje kilka instrukcji FROM w jednym pliku Dockerfile. Wczesne etapy budują aplikację, a etap końcowy kopiuje wyłącznie gotowe artefakty, pozostawiając narzędzia budowania za sobą.

Nazywanie etapu

Nadaj etapowi nazwę za pomocą AS, aby późniejsze etapy mogły się do niego odwoływać.

FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci

Budowanie w pierwszym etapie

Etap budowania kompiluje lub tworzy pakiet aplikacji. Na tym etapie dostępne są wszystkie zależności deweloperskie i narzędzia.

COPY . .
RUN npm run build

Oszczędny etap końcowy

Rozpocznij etap końcowy od minimalnego obrazu bazowego, a następnie skopiuj tylko to, czego aplikacja potrzebuje do działania, używając COPY --from.

FROM node:20-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules

Pełny Dockerfile wieloetapowy

Połączenie etapów daje mały obraz końcowy, który zawiera zbudowaną aplikację, ale nie zawiera narzędzi użytych do jej budowania.

FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
CMD ['node', 'dist/main.js']

Wybór małego obrazu bazowego

Obraz bazowy jest często najważniejszym czynnikiem. Warianty Slim i Alpine znacznie zmniejszają rozmiar obrazów:

  • node:20 ~ duży
  • node:20-slim ~ znacznie mniejszy
  • node:20-alpine ~ najmniejszy, z minimalnym zestawem bibliotek

Tylko zależności produkcyjne

Pomiń zależności deweloperskie w obrazie uruchomieniowym. Instalacja z flagą produkcyjną nie umieszcza w nim pakietów testowych i budujących.

RUN npm ci --omit=dev

Korzystanie z .dockerignore

Plik .dockerignore usuwa zbędne elementy z kontekstu budowania, przyspiesza budowanie i zapobiega przypadkowemu skopiowaniu sekretów lub bardzo dużych katalogów.

node_modules
.git
.env
Dockerfile
*.log

Pomiar rezultatu

Sprawdź rezultat, kontrolując rozmiary obrazów. Dobrze zbudowany obraz wieloetapowy może mieć ułamek rozmiaru naiwnego obrazu jednoetapowego.

docker images myapp

Szybki sprawdzian

Sprawdź swoją wiedzę na temat kompilacji wieloetapowej.

Podsumowanie

Nauczyłeś się dostarczać oszczędne obrazy Docker:

  • kompilacje wieloetapowe wykorzystują wiele etapów FROM w jednym Dockerfile,
  • aplikację buduje się we wczesnym etapie, a następnie za pomocą COPY --from kopiuje się tylko artefakty do oszczędnego etapu końcowego,
  • należy wybierać małe obrazy bazowe (slim/alpine) i instalować wyłącznie zależności produkcyjne,
  • należy używać .dockerignore, aby ograniczyć kontekst budowania.

Mniejsze obrazy budują się szybciej, są szybciej wdrażane i zapewniają większe bezpieczeństwo.

Często zadawane pytania

Czy lekcja „Kompilacje wieloetapowe i mniejsze obrazy” jest bezpłatna?

Tak — pełny tekst „Kompilacje wieloetapowe i mniejsze obrazy” 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 „Kompilacje wieloetapowe i mniejsze obrazy”?

Poznaj sposób, w jaki wieloetapowe pliki Dockerfile pozwalają dostarczać odchudzone obrazy produkcyjne przez oddzielenie narzędzi budowania od środowiska uruchomieniowego, znacznie zmniejszając rozmi… Ć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 „Kompilacje wieloetapowe i mniejsze obrazy”?

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. Poznawanie plików Dockerfile
  2. Tworzenie niestandardowych obrazów Docker
  3. Warstwy i optymalizacja obrazów
  4. Kompilacje wieloetapowe i mniejsze obrazy
← Powrót do Docker & DevOps Fundamentals