1. Local Build and Basic Containerization
First, you might compile your app locally:dist/ folder with your production assets. To serve it via Nginx, you could write:
Drawbacks of This Approach
2. Using a Separate Builder Image
To ensure repeatable builds, move compilation into its own container:- builder image with
dist/ - my-app image ready to serve via Nginx
Manually extracting artifacts involves creating temporary containers and copying files. This adds complexity and slows down CI/CD pipelines.
3. Simplifying with Multi-Stage Builds
Multi-stage builds merge builder and final stages:- builder stage installs dependencies and compiles into
dist/. - final stage pulls only the built assets into a minimal Nginx image.
3.1 Using Numeric Stage References
Instead of names, you can refer to stages by index:Using named stages (e.g.,
AS builder) improves readability in complex Dockerfiles.3.2 Building a Specific Stage
For debugging or CI-cache purposes, target only the build stage:4. Benefits of Multi-Stage Builds
