instruction: Create a Dockerfile for Node.js with production best practices
output: ```dockerfile
  from a positive number to a smaller, non-negative
  number.Pod subresourcesThe above update rules apply to regular pod updates, but other pod fields can be updated through subresources.Resize: The resize subresource allows container resources (spec.containers[*].resources) to be updated.
  See Resize Container Resources for more details.Ephemeral Containers: The ephemeralContainers subresource allows
  ephemeral containers
  to be added to a Pod.
  See Ephemeral Containers for more details.Status: The status subresource allows the pod status to be updated.
  This is typically only used by the Kubelet and other system controllers.Binding: The binding subresource allows setting the pod's spec.nodeName via a Binding request.
  This is typically only used by the scheduler.Pod generationThe metadata.generation field is unique. It will be automatically set by the
  system such that new pods have a metadata.generation of 1, and every update to
  mutable fields in the pod's spec will increment the metadata.generation by 1.FEATURE STATE:
  Kubernetes v1.33 [alpha] (enabled by default: false)observedGeneration is a field that is captured in the status section of the Pod
  object. If the feature gate PodObservedGenerationTracking is set, the Kubelet will set status.observedGeneration
  to track the pod state to the current pod status. The pod's status.observedGeneration will reflect the
  metadata.generation of the pod at the point that the pod status is being reported.Note:The status.observedGeneration field is managed by the kubelet and external controllers should not modify this field.Different status fields may either be associated with the metadata.generation of the current sync loop, or with the
  metadata.generation of the previous sync loop. The key distinction is whether a change in the spec is reflected
  directly in the status or is an indirect result of a running process.Direct Status UpdatesFor status fields where the allocated spec is directly reflected, the observedGeneration will
  be associated with the current metadata.generation (Generation N).This behavior applies to:Resize Status: The status of a resource resize operation.Allocated Resources: The resources allocated to the Pod after a resize.Ephemeral Containers: When a new ephemeral container is added, and it is in Waiting state.Indirect Status UpdatesFor status fields that are an indirect result of running the spec, the observedGeneration will be associated
  with the metadata.generation of the previous sync loop (Generation N-1).This behavior applies to:Container Image: The ContainerStatus.ImageID reflects the image
  ```