Docker multi-stage builds allow using multiple FROM instructions in a single Dockerfile, where each FROM starts a new build stage. This allows keeping only the files needed for the final image, significantly reducing image size. For example: the first stage uses a build environment to compile the application, the second stage uses a lightweight runtime environment to copy the compiled artifacts. Use the AS keyword to name stages and the --from parameter to copy files from previous stages. Multi-stage builds are particularly suitable for compiled languages (such as Go, Java, C++) applications, keeping the build toolchain in the build stage and only including the runtime in the final image.