Basis van cloud en containers
FROM node:lts
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
CMD ["node", "dist/server.js"]Het bovenstaande Dockerfile (B) is gemaakt uit Dockerfile (A), waarin RUN npm ci na COPY . . stond, door de volgorde zo te veranderen dat eerst alleen de bestanden met de afhankelijkheden worden gekopieerd. npm ci duurt 120 seconden, npm run build 30 seconden en COPY . . 2 seconden; de tijd van de andere instructies is verwaarloosbaar. Het image wordt 20 keer per dag opnieuw gebouwd nadat alleen de broncode onder src is gewijzigd (package.json en package-lock.json blijven ongewijzigd). Hoeveel korter is de totale buildtijd per dag met B dan met A, als de cache van de vorige build kan worden gebruikt?
- A2 minuten
- BOngeveer 11 minuten
- C40 minuten
Antwoord en toelichting tonen
Antwoord: C. 40 minuten
De buildcache wordt per instructie gebruikt, en bij COPY hangt het ervan af of de inhoud van de gekopieerde bestanden dezelfde is als de vorige keer. Zodra de cache voor een instructie niet kan worden gebruikt, worden alle volgende instructies opnieuw uitgevoerd. In A wordt de wijziging bij de eerste COPY . . gevonden, dus elke build duurt 2 + 120 + 30 = 152 seconden. In B zijn package.json en package-lock.json ongewijzigd, dus wordt de cache tot en met npm ci gebruikt en draaien alleen COPY . . en npm run build, wat 2 + 30 = 32 seconden kost. Het verschil is 120 seconden per build, of 2400 seconden = 40 minuten voor 20 builds.