Une image est faite de couches empilées, chacune issue d'une instruction du Dockerfile. Docker réutilise en cache les couches inchangées. Il faut donc placer les instructions qui changent peu (installation des dépendances) avant celles qui changent souvent (code source).
Exemple
COPY package*.json ./ RUN npm ci COPY . .