Dockerfile FROMDas `FROM` Anweisung initialisiert einen neuen Build-Stage und legt das Basis-Image für nachfolgende Anweisungen fest. Ein gültiger Dockerfile beginnt mit einer `FROM` Anweisung. Das Image kann jeder gültige Image sein – es ist besonders einfach, ein offizielles Image als Basis zu verwenden.Das `FROM` kann mehrmals in ein und demselben Dockerfile vorkommen, um mehrere Images zu erstellen oder als Abhängigkeit für eine Stage zu verwenden. Einfach den Namen des erstellten Images notieren, das durch die Anweisung `docker build --target ` erstellt wurde.Optional kann das Argument `AS name` direkt nach `FROM` angegeben werden. Der Name kann in nachfolgenden `FROM` und `COPY --from=` Anweisungen verwendet werden, um das Quell-Image des Namens zu referenzieren, einschließlich der auf dieses Image aufbauenden Stages.`FROM` unterstützt Optionen, die die Art des gepufferten Images beeinflussen.`ARG` ist die einzige Anweisung, die vor `FROM` im Dockerfile stehen kann. Siehe unten für `FROM` Anweisungen, die `ARG` Variablen verwenden.FROM [--platform=] [AS ]oderFROM [--platform=] [:] [AS ]oderFROM [--platform=] [@] [AS ]--platform optional auf Plattformen wie Docker for Mac/Windows, um die Plattform des Quell-Images anzugeben, z. B. linux/amd64, linux/arm64 oder windows/amd64. Standardmäßig wird die aktuelle Build-Plattform verwendet. Weitere Informationen finden Sie unter Multiplattform-Tags.Das Tag oder Digest-Werte sind optional. Wenn Sie nichts angeben, wird standardmäßig das Tag `latest` verwendet. Wenn das gewählte Tag nicht im Repository vorhanden ist, gibt der Client einen Fehler zurück.FROM kann mit der Option `--platform` verwendet werden, um die Plattform des Quell-Images anzugeben. Das bedeutet, dass das folgende Beispiel das `node:12-alpine` Image für die Plattform `linux/amd64` verwendet, unabhängig davon, welche Plattform für den Build verwendet wird:FROM --platform=linux/amd64 node:12-alpineARG und FROM`ARG` ist die einzige Anweisung, die vor `FROM` im Dockerfile stehen kann. Das `FROM` Anweisung unterstützt Variablen, die mit `ARG` deklariert wurden – die einzige Anweisung, die vor `FROM` stehen kann.FROM busybox ARG vers FROM ubuntu:$vers RUN echo $versJede `ARG` Anweisung hat einen Build-Phase-Bereich und ist nach dem `FROM` im Build nicht verfügbar. Verwenden Sie eine `ARG` Anweisung und `ARG` Anweisungen ohne ein Wert, um ein Standard zu verwenden, bevor Sie die erste `FROM` verwenden. Ein Beispiel:ARG VERSION=latest FROM busybox:$VERSION ARG VERSION RUN echo $VERSION > image_versionDas vorherige Beispiel gibt die Anweisung, die Standardversion auf `latest` zu setzen, erlaubt aber die Möglichkeit, die Version durch den Befehl `docker build --build-arg VERSION=1.2.3` zu überschreiben.

Die "FROM"-Anweisung in einer Dockerfile legt das Basis-Image für den Container fest. Sie definiert die initiale Umgebung und bestimmt die Ebenen für nachfolgende Befehle, was für effiziente Image-Erstellungen entscheidend ist.
Inhaltsverzeichnis
dockerfile-from-2

Understanding the Dockerfile FROM Instruction

Im Bereich der Containerisierung hat sich Docker als eine zentrale Technologie etabliert, die es Entwicklern ermöglicht, Anwendungen und ihre Abhängigkeiten in Containern zu verpacken. Im Mittelpunkt dieses Prozesses steht die Dockerfile, ein Skript, das eine Reihe von Anweisungen enthält, wie ein Docker-Image erstellt werden soll. Eine der grundlegenden Anweisungen in einer Dockerfile ist FROM, die das Basis-Image angibt, auf dem das Docker-Image aufgebaut wird. Das Verständnis der Nuancen des FROM Die Anweisung ist entscheidend für die Erstellung effizienter, wartbarer und portabler Docker-Images.

Die Rolle der FROM in Dockerfile

Die FROM instruction sets the foundation for a Docker image. It defines the starting point for the build process by referencing an existing image from the Docker Hub or a custom image stored in a private registry. By using FROM, Entwickler können vordefinierte Images nutzen, die wichtige Betriebssystemkomponenten, Programmiersprachen oder Frameworks enthalten, um so die Komplexität ihrer eigenen Docker-Images zu reduzieren.

Syntax der FROM Anweisung

Die Grundsyntax des FROM Die Anweisung ist einfach.

FROM [:]
  • “: Der Name des Basisbildes, das Sie verwenden möchten.
  • `: An optional field that specifies the version of the image. If omitted, Docker defaults to theneueste` Tag.

Beispiel:

VON ubuntu:20.04

In this case, the Docker image will be based on Ubuntu version 20.04.

Arten von Basisabbildern

Offizielle Bilder

Docker Hub beherbergt eine Vielzahl offizieller Images, die von der Docker-Community gepflegt oder von Softwareherstellern unterstützt werden. Diese Images sind in der Regel gut dokumentiert, werden regelmäßig aktualisiert und halten sich an bewährte Praktiken, was sie für viele Anwendungen zu einer zuverlässigen Wahl macht. Beispiele hierfür sind:

  • ubuntu: A lightweight version of the Ubuntu operating system.
  • nodeEin Basis-Image für Node.js-Anwendungen.
  • python: Ein Basis-Image für Python-Anwendungen.

Benutzerdefinierte Bilder

In einigen Fällen müssen Entwickler möglicherweise benutzerdefinierte Images erstellen, die als Basis-Images für ihre Projekte dienen. Dies ist besonders nützlich, wenn bestimmte Abhängigkeiten oder Konfigurationen erforderlich sind, die in den offiziellen Images nicht verfügbar sind. Die Erstellung eines benutzerdefinierten Basis-Images kann durch die Verwendung des FROM Anweisung, auf einem einfacheren Bild aufzubauen und die notwendigen Komponenten hinzuzufügen.

Beispiel:

FROM alpine:3.12
RUN apk add --no-cache openjdk11

This example starts with the minimal Alpine Linux image and installs OpenJDK 11, resulting in a custom image tailored for Java applications.

Mehrstufige Builds

One of the more advanced features of Docker is the ability to use multi-stage builds, which allow developers to create more efficient images by separating the build environment from the production environment. Each FROM instruction defines a new stage in the build process, enabling developers to copy only the necessary artifacts from one stage to the next.

Beispiel:

# Build stage
FROM golang:1.16 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp

# Production stage
FROM alpine:3.12
WORKDIR /app
COPY --from=builder /app/myapp .
CMD ["./myapp"]

In this example, the first stage uses the Go image to compile the application, while the second stage creates a minimal image that only includes the executable, significantly reducing the final image size.

Best Practices for Using FROM

Die richtige Basis-Image auswählen

Selecting an appropriate base image is crucial for the performance, security, and maintainability of Docker images. Here are some guidelines:

  1. Minimieren der Bildgröße: Use smaller images (e.g., Alpine or BusyBox) when possible to reduce the overall size of your Docker images.

  2. Verwenden Sie offizielle Bilder: Wann immer möglich, nutzen Sie offizielle Images, da diese in der Regel gut gewartet, getestet und für die Leistung optimiert sind.

  3. Bleib auf dem Laufenden: Überprüfen Sie regelmäßig auf Updates für Basis-Images und deren Abhängigkeiten, um Sicherheit und Kompatibilität zu gewährleisten.

  4. Avoid Unnecessary LayersKombinieren Sie mehrere Befehle zu einem einzigen Befehl. RUN instruction when appropriate to minimize the number of image layers, improving build performance and efficiency.

Version Control

When specifying an image in the FROM Erwäge die Verwendung eines spezifischen Tags anstatt. latest. Relying on latest kann zu unvorhersehbaren Builds führen, da sich das Basis-Image unerwartet ändern kann. Die Verwendung spezifischer Versions-Tags stellt sicher, dass Ihre Builds reproduzierbar sind und eine konsistente Laufzeitumgebung beibehalten.

Beispiel:

FROM node:14.17.0

Verwendung von Build-Argumenten

Man FROM Anweisung.

Beispiel:

ARG BASE_IMAGE=node:14
FROM ${BASE_IMAGE}

In this case, you can specify the BASE_IMAGE argument during the build process to easily switch between different base images.

Häufige Fallstricke bei FROM

While the FROM Die Anweisung ist unkompliziert, kann aber zu Problemen führen, wenn sie nicht umsichtig eingesetzt wird. Hier sind einige häufige Fallstricke, die es zu vermeiden gilt:

Ignoring Security Best Practices

Using outdated or unmaintained base images can introduce vulnerabilities into your application. Always review and update base images regularly, and consider scanning images for security vulnerabilities before deployment.

Overly Complex Base Images

Die Verwendung übermäßig komplexer Basis-Images kann zu aufgeblähten Images führen, die länger zum Erstellen und Bereitstellen benötigen. Streben Sie danach, minimale Images zu erstellen, die nur die wesentlichen Komponenten enthalten, die für Ihre Anwendung erforderlich sind.

Vernachlässigung des Cache-Managements

Docker uses a layer caching mechanism to optimize builds. However, if you frequently change the FROM instruction or the images being used, you may inadvertently bypass cached layers, leading to longer build times. Be mindful of caching behavior when designing your Dockerfile.

Fazit

Die FROM instruction is a foundational element of Dockerfiles that plays a critical role in defining the base upon which Docker images are built. By understanding its syntax, types of base images, and best practices, developers can create efficient, reliable, and secure Docker images that enhance the portability and scalability of their applications. As you gain proficiency with Docker and its capabilities, remember that the choice of base image can significantly impact your development workflow, deployment strategies, and the overall performance of your applications. Embrace the power of the FROM Anleitung, und nutzen Sie sie weise, um das volle Potenzial der Containerisierung in Ihren Projekten zu entfalten.