Docker Multi-Stage Builds: Eine ausfuhrliche Anleitung

Einfuhrung
Docker hat die Art und Weise revolutioniert, wie wir Anwendungen entwickeln, paketieren und deployen. Es bietet eine konsistente Umgebung, in der Anwendungen von der Entwicklung bis zur Produktion laufen konnen, und reduziert das "bei mir funktioniert es"-Problem. Eine der leistungsfahigsten Funktionen, die Docker eingefuhrt hat, sind Multi-Stage Builds. Diese Funktion hilft uns, schlanke, effiziente Container ohne den ublichen Aufwand zu erstellen. In diesem Blogbeitrag werden wir Docker Multi-Stage Builds, ihre Vorteile und Best Practices untersuchen. Wir werden auch eine Beispiel-Dockerfile bereitstellen, um das Konzept zu veranschaulichen.
Was ist ein Docker Multi-Stage Build?
Docker Multi-Stage Build ist eine Funktion, die es dir ermoglicht, mehrere FROM-Anweisungen in deiner Dockerfile zu verwenden. Jede FROM-Anweisung kann ein anderes Basis-Image verwenden und startet eine neue Build-Phase. Du kannst selektiv Artefakte von einer Phase in eine andere kopieren und alles zurucklassen, was du im endgultigen Image nicht brauchst. Dies ermoglicht es dir, kleinere, effizientere Images zu erstellen, indem du den Build- und den Paketierungsprozess in verschiedene Phasen trennst.
Warum Docker Multi-Stage Builds verwenden?
Vor der Einfuhrung von Multi-Stage Builds war die Erstellung schlanker Docker-Images etwas muhsam. Du musstest separate Dockerfiles zum Bauen und Ausfuhren von Anwendungen erstellen oder unnotige Tools in deine Produktions-Images installieren. Multi-Stage Builds losen diese Probleme, indem sie dir ermoglichen, eine einzige Dockerfile zur Erstellung effizienter Images zu verwenden. Hier sind einige Grunde, warum du Docker Multi-Stage Builds verwenden solltest:
- Kleinere Image-Grosse: Indem du nur die notigen Dateien von der Build-Phase in das endgultige Image kopierst, kannst du die Grosse deiner Docker-Images erheblich reduzieren. Kleinere Images sind schneller beim Pushen und Pullen aus Registries und verbrauchen weniger Speicherplatz.
- Trennung der Zustandigkeiten: Mit Multi-Stage Builds kannst du die Build-Zeit-Abhangigkeiten von den Laufzeit-Abhangigkeiten trennen. Dies macht deine Dockerfile lesbarer und wartbarer.
- Sicherheit: Kleinere Images haben eine kleinere Angriffsflache. Indem du unnotige Tools und Dateien ausschliesst, reduzierst du das Potenzial fur Sicherheitslucken.
Best Practices
- Verwende spezifische Basis-Images: Verwende fur jede Phase das spezifischste Basis-Image, das nur das enthalt, was du fur diese Phase benotigst. Verwende zum Beispiel ein Node.js-Image fur eine Build-Phase, die eine Node.js-Anwendung betrifft, und ein Alpine-Image fur eine leichtgewichtige Endphase.
- Optimiere die Layer-Erstellung: Docker baut Images in Schichten auf. Um deine Builds schneller und deine Images kleiner zu machen, versuche, die Anzahl der Layer zu minimieren, indem du Befehle mit
&&kombinierst. - Raume hinter dir auf: Bereinige in der Build-Phase unnotige Dateien und Artefakte, nachdem du mit ihnen fertig bist. Dies macht den Build-Cache kleiner und schneller.
Beispiel-Dockerfile
Hier ist eine Beispiel-Dockerfile, die einen Multi-Stage Build fur eine Node.js-Anwendung demonstriert:
Dockerfile
—- Base Node —-
FROM node:14 AS base
WORKDIR /usr/src/app
COPY package*.json ./
—- Dependencies —-
FROM base AS dependencies
RUN npm install
—- Test —-
run linters, setup and tests
FROM dependencies AS test
COPY . .
RUN npm run test
—- Build —-
FROM dependencies AS build
COPY . .
RUN npm run build
—- Release —-
FROM node:14-alpine AS release
WORKDIR /usr/src/app
COPY –from=build /usr/src/app/dist ./dist
EXPOSE 8080
CMD [“node”, “dist/index.js”]
In dieser Dockerfile haben wir funf Phasen: base, dependencies, test, build und release. Die base-Phase kopiert die package.json-Dateien. Die dependencies-Phase installiert die Node-Module. Die test-Phase fuhrt die Tests aus. Die build-Phase baut die Anwendung. Schliesslich erstellt die release-Phase das endgultige Image, das in der Produktion verwendet wird. Nur die notigen Dateien werden in das endgultige Image kopiert, was zu einem kleineren, effizienteren Image fuhrt.
Fazit
Docker Multi-Stage Builds sind ein leistungsfahiges Werkzeug zur Erstellung effizienter Docker-Images. Sie ermoglichen es dir, deine Build- und Laufzeitumgebungen zu trennen, deine Image-Grosse zu reduzieren und die Sicherheit zu verbessern. Indem du Best Practices befolgst und eine gut strukturierte Dockerfile verwendest, kannst du diese Funktion voll ausschopfen. Viel Spass beim Dockern!
Weiteres von Ercan
Zwei weitere Seiten, gleicher Autor, anderes Terrain.
KI, LLMs, Agents, angewandte ML.
Praxisnotizen zu KI-Workloads. Bedrock-Kostenanalyse, Agent-Patterns, Vektorspeicher-Tradeoffs, Failure-Modes in Produktion.
Besuchen ercan.ai →Die Drehscheibe. Über mich, Beratung, Kontakt.
Persönliche Drehscheibe für beide Schreibspuren. Wer ich bin, wie die Beratung funktioniert, wie Sie mich erreichen.
Besuchen ercanermis.com →