Grundlagen von Cloud und Containern

FROM node:lts
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
CMD ["node", "dist/server.js"]

Das obige Dockerfile (B) ist aus Dockerfile (A) entstanden, in dem RUN npm ci nach COPY . . stand, indem die Reihenfolge so geändert wurde, dass zuerst nur die Abhängigkeitsdateien kopiert werden. npm ci dauert 120 Sekunden, npm run build 30 Sekunden und COPY . . 2 Sekunden; die Zeit der übrigen Anweisungen ist vernachlässigbar. Das Image wird 20-mal am Tag neu gebaut, wobei sich jeweils nur der Quellcode unter src ändert (package.json und package-lock.json bleiben unverändert). Um wie viel ist die gesamte Build-Zeit pro Tag bei B kürzer als bei A, wenn der Cache des vorherigen Builds genutzt werden kann?

  1. A2 Minuten
  2. BEtwa 11 Minuten
  3. C40 Minuten
Antwort und Erläuterung anzeigen

Antwort: C. 40 Minuten

Der Build-Cache wird Anweisung für Anweisung genutzt; bei COPY entscheidet, ob der Inhalt der kopierten Dateien derselbe ist wie beim letzten Mal. Sobald der Cache für eine Anweisung nicht genutzt werden kann, werden alle späteren Anweisungen erneut ausgeführt. Bei A wird die Änderung schon beim ersten COPY . . erkannt, jeder Build dauert also 2 + 120 + 30 = 152 Sekunden. Bei B sind package.json und package-lock.json unverändert, der Cache wird bis einschließlich npm ci genutzt, und nur COPY . . und npm run build laufen, zusammen 2 + 30 = 32 Sekunden. Der Unterschied beträgt 120 Sekunden pro Build, bei 20 Builds also 2400 Sekunden = 40 Minuten.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Grundlagen von Cloud und Containern

  1. Welche Beschreibung von benannten Volumes und Bind-Mounts, mit denen in Docker die von einem Container geschriebenen Daten erhalten bleiben, ist richtig?
  2. Ein Image wird mit der Angabe registry.example.com/team/web:1.4 geholt (pull). Welche Kombination gibt die Bedeutung der einzelnen Teile dieser Angabe richtig an?
  3. 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?
  4. 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?
  5. In Kubernetes betreibt ein Deployment mit replicas: 3 drei Pods. Was geschieht, wenn einer dieser Pods mit kubectl delete pod gelöscht wird?