instruction: Create a Dockerfile for Node.js with production best practices
output: ```dockerfile
  from a volume, so memory used by those files can not be reclaimed when the
  system or the pod are under memory pressure.
  A memory-backed emptyDir is useful because of its performance, but memory
  is generally much smaller in size and much higher in cost than other storage
  media, such as disks or SSDs. Using large amounts of memory for emptyDir
  volumes may affect the normal operation of your pod or of the whole node,
  so should be used carefully.
  
  If you are administering a cluster or namespace, you can also set
  ResourceQuota that limits memory use;
  you may also want to define a LimitRange
  for additional enforcement.
  If you specify a spec.containers[].resources.limits.memory for each Pod,
  then the muximum size of an emptyDir volume will be the pod's memory limit.
  As an alternative, a cluster administrator can enforce size limits for
  emptyDir volumes in new Pods using a policy mechanism such as
  ValidationAdmissionPolicy.
  Local ephemeral storage
  
  FEATURE STATE: Kubernetes v1.25 [stable]
  
  Nodes have local ephemeral storage, backed by
  locally-attached writeable devices or, sometimes, by RAM.
  "Ephemeral" means that there is no long-term guarantee about durability.
  Pods use ephemeral local storage for scratch space, caching, and for logs.
  The kubelet can provide scratch space to Pods using local ephemeral storage to
  mount emptyDir
  volumes into containers.
  The kubelet also uses this kind of storage to hold
  node-level container logs,
  container images, and the writable layers of running containers.
  Caution:If a node fails, the data in its ephemeral storage can be lost.
  Your applications cannot expect any performance SLAs (disk IOPS for example)
  ```