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 ciBudowanie 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 buildOszczę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_modulesPeł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żynode:20-slim~ znacznie mniejszynode: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=devKorzystanie 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
*.logPomiar rezultatu
Sprawdź rezultat, kontrolując rozmiary obrazów. Dobrze zbudowany obraz wieloetapowy może mieć ułamek rozmiaru naiwnego obrazu jednoetapowego.
docker images myappSzybki sprawdzian
Sprawdź swoją wiedzę na temat kompilacji wieloetapowej.
Podsumowanie
Nauczyłeś się dostarczać oszczędne obrazy Docker:
- kompilacje wieloetapowe wykorzystują wiele etapów
FROMw jednym Dockerfile, - aplikację buduje się we wczesnym etapie, a następnie za pomocą
COPY --fromkopiuje 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
- Poznawanie plików Dockerfile
- Tworzenie niestandardowych obrazów Docker
- Warstwy i optymalizacja obrazów
- Kompilacje wieloetapowe i mniejsze obrazy