Grundlagen von Cloud und Containern

FROM golang AS build
WORKDIR /src
COPY . .
RUN CGO_ENABLED=0 go build -o /out/app .

FROM scratch
COPY --from=build /out/app /app
ENTRYPOINT ["/app"]

scratch ist ein leeres Image, das keinerlei Dateien enthält. Was enthält das endgültige Image, das mit dem obigen Dockerfile mit Multi-Stage-Build gebaut wird?

  1. ANur die in der Stage build erzeugte ausführbare Datei /app; der Go-Compiler und der Quellcode sind nicht enthalten
  2. BDie Schichten der Stage build und der letzten Stage liegen alle übereinander, sodass Go-Compiler, Quellcode und /app enthalten sind
  3. CNur das golang-Image des ersten FROM und der Quellcode; /app wird bei jedem Start eines Containers gebaut
Antwort und Erläuterung anzeigen

Antwort: A. Nur die in der Stage build erzeugte ausführbare Datei /app; der Go-Compiler und der Quellcode sind nicht enthalten

Bei einem Multi-Stage-Build beginnt mit jedem FROM eine neue Stage, und nur die letzte Stage wird zum endgültigen Image. Frühere Stages dienen dazu, mit Werkzeugen wie Compilern Artefakte zu erzeugen, und nur die in COPY --from genannten Dateien gelangen in die letzte Stage. Hier wird nur /app auf das leere scratch kopiert, sodass ein kleines Image ohne Go-Compiler und Quellcode entsteht. Da in scratch auch keine einzige Shared Library vorhanden ist, wird mit CGO_ENABLED=0 eine ausführbare Datei gebaut, die von keinen anderen Bibliotheken abhängt. Weniger Inhalt bedeutet schnelleres Holen sowie weniger Werkzeuge für Angreifer und weniger Angriffsfläche für Schwachstellen.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Grundlagen von Cloud und Containern

  1. Wie heißt in Kubernetes die kleinste Einheit, die bereitgestellt und verwaltet wird und einen oder mehrere Container zusammenfasst, die sich dieselbe IP-Adresse und dieselben Volumes teilen?
  2. In Kubernetes betreibt ein Deployment mit replicas: 3 drei Pods. Was geschieht, wenn einer dieser Pods mit kubectl delete pod gelöscht wird?
  3. In einem Kubernetes-Deployment wird das Container-Image in der Pod-Vorlage auf eine neue Version geändert. Was geschieht mit der Standard-Update-Strategie (RollingUpdate)?
  4. Ein Deployment mit replicas: 10 hat die Rolling-Update-Einstellungen maxSurge: 25% und maxUnavailable: 25%. Welche Kombination gibt die Obergrenze der Gesamtzahl der Pods und die Untergrenze der Zahl verfügbarer Pods während eines Updates richtig an?
  5. In Kubernetes erhält ein Pod bei jedem Neuerzeugen eine andere IP-Adresse. Welche Ressource ermöglicht es anderen Anwendungen, sich über einen gleichbleibenden Namen und eine gleichbleibende Adresse mit mehreren per Label ausgewählten Pods zu verbinden, wobei die Last auf diese verteilt wird?