instruction: Create a Dockerfile for fundamentals
output: ```dockerfile
  from Docker Hub, or were built with BuildKit as builder.
  Before BuildKit, the "classic" builder would produce a new "intermediate"
  image for each step for caching purposes, and the IMAGE column would show
  the ID of that image.BuildKit uses its own caching mechanism, and no longer requires intermediate
  images for caching. Refer to
  BuildKit
  to learn more about other enhancements made in BuildKit.Check out the layers for each imageUse the docker image inspect command to view the cryptographic IDs of the
  layers in each image:
  
  $ docker image inspect --format "{{json .RootFS.Layers}}" acme/my-base-image:1.0
  [
   "sha256:72e830a4dff5f0d5225cdc0a320e85ab1ce06ea5673acfe8d83a7645cbd0e9cf",
   "sha256:07b4a9068b6af337e8b8f1f1dae3dd14185b2c0003a9a1f0a6fd2587495b204a"
  ]
  
  $ docker image inspect --format "{{json .RootFS.Layers}}" acme/my-final-image:1.0
  [
   "sha256:72e830a4dff5f0d5225cdc0a320e85ab1ce06ea5673acfe8d83a7645cbd0e9cf",
   "sha256:07b4a9068b6af337e8b8f1f1dae3dd14185b2c0003a9a1f0a6fd2587495b204a",
   "sha256:cc644054967e516db4689b5282ee98e4bc4b11ea2255c9630309f559ab96562e",
   "sha256:e84fb818852626e89a09f5143dbc31fe7f0e0a6a24cd8d2eb68062b904337af4"
  ]
  Notice that the first two layers are identical in both images. The second
  image adds two additional layers. Shared image layers are only stored once
  in /var/lib/docker/ and are also shared when pushing and pulling an image
  to an image registry. Shared image layers can therefore reduce network
  bandwidth and storage.
  TipFormat output of Docker commands with the --format option.The examples above use the docker image inspect command with the --format
  option to view the layer IDs, formatted as a JSON array. The --format
  option on Docker commands can be a powerful feature that allows you to
  extract and format specific information
  ```