Leverage Docker BuildKit’s cache and bind mount capabilities to dramatically improve CI build times and reduce image sizes. Instead of copying source files into intermediate layers, use bind mounts to provide build context and cache mounts for package managers and build artifacts.

Why this matters:

Implementation example:

# Use cache mounts for package managers
RUN \
  --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \
  --mount=target=/var/cache/apt,type=cache,sharing=locked \
  <<HEREDOC
    apt update && apt install -y --no-install-recommends \
      build-essential \
      curl
HEREDOC

# Use bind mounts for source files and cache mounts for build artifacts
RUN \
  --mount=type=bind,source=src,target=src \
  --mount=type=bind,source=package.json,target=package.json \
  --mount=type=cache,target=node_modules \
  npm install && npm run build

Make sure your CI environment supports BuildKit (Docker 18.09+) and enable BuildKit features with DOCKER_BUILDKIT=1.