4.1 Grundlagen des docker build-Kommandos
Das Kommando docker build
ist der Hauptweg, ein Docker-Image aus einem Dockerfile zu erstellen. Es nimmt die Anweisungen aus dem Dockerfile und führt sie Schritt für Schritt aus, um ein Image aus Schichten zu bilden. In dieser Vorlesung schauen wir uns an, wie das Kommando docker build
funktioniert, welche Parameter es hat und wie man es in der Praxis einsetzt.
Das Kommando docker build
erstellt ein Image aus einem Dockerfile und dem sogenannten Build-Kontext. Der Build-Kontext sind Dateien, die Docker zur Erstellung des Images verwendet. Das kann ein lokaler Ordner auf deinem Rechner oder beispielsweise ein Repository auf GitHub sein.
Syntax
docker build [OPTIONS] PATH | URL | -
Wo:
-
PATH
: Pfad zum Verzeichnis, das das Dockerfile und den Build-Kontext enthält. URL
: URL einer Remote-Repository-Adresse.-
: liest das Dockerfile aus der Standardeingabe (stdin).
Beispiel für die Basis-Nutzung
In diesem Beispiel benutzt Docker das Dockerfile aus dem aktuellen Verzeichnis (.)
und erstellt ein Image mit dem Namen myimage
und dem Tag latest
.
docker build -t myimage:latest .
4.2 Customizing des build
-Befehls
Hauptparameter des docker build
-Befehls
Der Befehl docker build
unterstützt viele Optionen, um den Build-Prozess anzupassen.
1. Parameter -t
, --tag
Der Parameter -t
oder --tag
wird verwendet, um dem erstellten Image einen Namen und einen Tag zuzuweisen.
docker build -t myimage:latest .
2. Parameter -f
, --file
Der Parameter -f
oder --file
erlaubt es, ein alternatives Dockerfile anzugeben, wenn es sich vom Standard-Dockerfile unterscheidet.
docker build -f Dockerfile.dev -t myimage:dev .
3. Parameter --build-arg
Der Parameter --build-arg
wird verwendet, um Build-Argumente zu übergeben, die mit der ARG-Direktive im Dockerfile definiert sind.
docker build --build-arg APP_VERSION=1.0 -t myimage:1.0 .
4. Parameter --no-cache
Der Parameter --no-cache
erlaubt es, den Build ohne Cache durchzuführen. Das ist nützlich, wenn man sicherstellen möchte, dass alle Befehle erneut ausgeführt werden.
docker build --no-cache -t myimage:latest .
5. Parameter --target
Der Parameter --target
wird verwendet, um ein Ziel-Stadium in einem mehrstufigen Build anzugeben.
docker build --target builder -t myimage:builder .
6. Parameter --rm
Der Parameter --rm
weist Docker an, Zwischencontainer nach erfolgreichem Build des Images zu löschen (standardmäßig aktiviert).
docker build --rm -t myimage:latest .
4.3 Beispiele für docker build
Beispiel 1: Grundlegende Erstellung
Nehmen wir an, du hast eine einfache Node.js-Anwendung und möchtest ein Docker-Image erstellen, um diese bereitzustellen.
Dockerfile:
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Build-Befehl:
docker build -t mynodeapp:latest .
In diesem Beispiel erstellt Docker ein Image mynodeapp
mit dem Tag latest
, indem es Dockerfile aus dem aktuellen Verzeichnis verwendet.
Beispiel 2: Erstellung mit Build-Argumenten
Build-Argumente ermöglichen es, Variablen während des Build-Prozesses an das Dockerfile zu übergeben.
Dockerfile
FROM node:14
ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION}
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Build-Befehl:
docker build --build-arg APP_VERSION=1.0 -t mynodeapp:1.0 .
In diesem Beispiel wird das Argument APP_VERSION
an das Dockerfile übergeben, was es ermöglicht, die Version der Anwendung während des Build-Prozesses festzulegen.
Beispiel 3: Multi-Stage Build
Multi-Stage Build wird verwendet, um Images zu erstellen, die nur die notwendigen Komponenten enthalten. Dadurch kann die endgültige Image-Größe reduziert werden.
Dockerfile
# Build-Schritt
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# Erstellung des endgültigen Images mit minimalem Dateisatz
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
Build-Befehl:
docker build -t mywebapp:latest .
In diesem Beispiel wird zuerst ein Zwischen-Image builder erstellt, in dem der Build der Anwendung durchgeführt wird. Nach dem Build wird die Anwendung in das endgültige Image übertragen, das Nginx zum Bereitstellen des fertigen Inhalts verwendet.
4.4 Praktische Tipps
1. Optimierung der Reihenfolge der Befehle
Für eine effiziente Nutzung des Docker-Caches ist es wichtig, die Befehle in der richtigen Reihenfolge anzuordnen. Zum Beispiel solltest du zuerst Dateien kopieren, die sich selten ändern, wie package.json
, um die erneute Installation von Abhängigkeiten zu minimieren. Danach kannst du die restlichen Dateien kopieren.
COPY package*.json ./
RUN npm install
COPY . .
2. Verwendung von .dockerignore
Erstelle eine .dockerignore
-Datei, um unnötige Dateien und Verzeichnisse aus dem Build-Kontext auszuschließen. Dadurch wird der Kontext verkleinert und der Build des Images beschleunigt.
Beispiel .dockerignore
:
node_modules
dist
*.log
3. Multi-Stage-Builds
Nutze Multi-Stage-Builds, um minimalistische und schlanke Images zu erstellen. Mit diesem Ansatz kannst du nur die Dateien und Abhängigkeiten in das finale Image aufnehmen, die tatsächlich für den Betrieb der Anwendung notwendig sind, und überflüssige Daten wie temporäre Dateien oder Quellcode ausschließen.
GO TO FULL VERSION