CodeGym /Kurse /Docker SELF /Image-Erstellung

Image-Erstellung

Docker SELF
Level 13 , Lektion 3
Verfügbar

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.

Terminal

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.

Terminal

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.

Terminal

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.

Terminal

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.

Terminal

docker build --no-cache -t myimage:latest .

5. Parameter --target

Der Parameter --target wird verwendet, um ein Ziel-Stadium in einem mehrstufigen Build anzugeben.

Terminal

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).

Terminal

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:

dockerfile

FROM node:14

WORKDIR /app
        
COPY package*.json ./
RUN npm install
        
COPY . .
        
EXPOSE 3000
        
CMD ["node", "app.js"]

Build-Befehl:

Terminal

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

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:

Terminal

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

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:

Terminal


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.

dockerfile

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:

Text

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.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION