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?
- A2 Minuten
- BEtwa 11 Minuten
- 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.
Weiter: 9 weitere Fragen zu Grundlagen von Cloud und Containern