Docker
Beginner
1 min read
Layer Caching and Build Optimisation
Example
# INEFFICIENT: deps reinstall on every code change
# COPY . .
# RUN npm ci
# EFFICIENT: deps cached separately from code
FROM node:20-alpine
WORKDIR /app
# Layer 1: OS packages (rare change)
RUN apk add --no-cache dumb-init
# Layer 2: package files (changes when deps update)
COPY package.json package-lock.json ./
# Layer 3: npm install (cached until layer 2 changes)
RUN npm ci --omit=dev
# Layer 4: app source (changes on every commit)
COPY src/ ./src/
EXPOSE 3000
ENV NODE_ENV=production
ENTRYPOINT ["dumb-init","--"]
CMD ["node","src/server.js"]
# .dockerignore contents:
# node_modules/
# .git/
# .env*
# *.test.js
# coverage/
# docs/
Related Resources
Docker Reference
Complete tag & property list
Docker How-To Guides
Step-by-step practical guides
Docker Exercises
Practice what you've learned
More in Docker