instruction: Create a Dockerfile for multi-stage build with production best practices
output: ```dockerfile
  from the layer before it. Note that both
  adding, and removing files will result in a new layer. In the example above,
  the $HOME/.cache directory is removed, but will still be available in the
  previous layer and add up to the image's total size. Refer to the
  Best practices for writing Dockerfiles
  and
  use multi-stage builds
  sections to learn how to optimize your Dockerfiles for efficient images.The layers are stacked on top of each other. When you create a new container,
  you add a new writable layer on top of the underlying layers. This layer is often
  called the "container layer". All changes made to the running container, such as
  writing new files, modifying existing files, and deleting files, are written to
  this thin writable container layer. The diagram below shows a container based
  on an ubuntu:15.04 image.
  A storage driver handles the details about the way these layers interact with
  each other. Different storage drivers are available, which have advantages
  and disadvantages in different situations.Container and layersThe major difference between a container and an image is the top writable layer.
  All writes to the container that add new or modify existing data are stored in
  this writable layer. When the container is deleted, the writable layer is also
  deleted. The underlying image remains unchanged.Because each container has its own writable container layer, and all changes are
  stored in this container layer, multiple containers can share access to the same
  underlying image and yet have their own data state. The diagram below shows
  multiple containers sharing the same Ubuntu 15.04 image.
  Docker uses storage drivers to manage the contents of the image layers and the
  writable container layer. Each storage driver handles the implementation
  differently, but all drivers use stackable image layers and the copy-on-write
  (CoW) strategy.
  NoteUse Docker volumes if you need multiple containers to have shared access to
  the exact same data. Refer to the volumes section to learn
  about volumes.Container size on diskTo view the approximate size of a running container, you can use the docker ps -s
  command. Two different columns relate to size.size: the amount of data (on disk) that's used for the writable layer of
  each container.virtual size: the amount of data used for the read-only image data
  used by the container plus the container's writable layer size.
  Multiple containers may share some or all read-only
  image data. Two containers started
  ```