instruction: Create a Dockerfile for fundamentals
output: ```dockerfile
  FROM docker.io/library/node:21-alpine 0.0s
  => CACHED [2/5] WORKDIR /app 0.0s
  => CACHED [3/5] COPY package.json yarn.lock ./ 0.0s
  => CACHED [4/5] RUN yarn install --production 0.0s
  => [5/5] COPY . . 0.5s
  => exporting to image 0.3s
  => => exporting layers 0.3s
  => => writing image
  sha256:91790c87bcb096a83c2bd4eb512bc8b134c757cda0bdee4038187f98148e2eda 0.0s
  => => naming to docker.io/library/node-app:3.0 0.0s
  First off, you should notice that the build was much faster. You'll see that several steps are using previously cached layers. That's good news; you're using the build cache. Pushing and pulling this image and updates to it will be much faster as well.By following these optimization techniques, you can make your Docker builds faster and more efficient, leading to quicker iteration cycles and improved development productivity.Additional resourcesOptimizing builds with cache managementCache Storage BackendBuild cache invalidationNext stepsNow that you understand how to use the Docker build cache effectively, you're ready to learn about Multi-stage builds.Multi-stage builds
  Request changesTable of contentsExplanationTry it outBuild the applicationAdditional resourcesNext steps
  
  Product offerings
  Pricing
  About us
  Contribute
  Read llms.txt
  Cookies Settings
  
  Status
  Legal```