instruction: Create a Dockerfile for Node.js with production best practices
output: ```dockerfile
  From Message
   ---- ------ ---- ---- -------
   Normal SuccessfulCreate 12m job-controller Created pod: myjob-hlrpl
   Normal SuccessfulDelete 11m job-controller Deleted pod: myjob-hlrpl
   Normal Suspended 11m job-controller Job suspended
   Normal SuccessfulCreate 3s job-controller Created pod: myjob-jvb44
   Normal Resumed 3s job-controller Job resumed
  The last four events, particularly the "Suspended" and "Resumed" events, are
  directly a result of toggling the .spec.suspend field. In the time between
  these two events, we see that no Pods were created, but Pod creation restarted
  as soon as the Job was resumed.Mutable Scheduling DirectivesFEATURE STATE:
  Kubernetes v1.27 [stable]In most cases, a parallel job will want the pods to run with constraints,
  like all in the same zone, or all either on GPU model x or y but not a mix of both.The suspend field is the first step towards achieving those semantics. Suspend allows a
  custom queue controller to decide when a job should start; However, once a job is unsuspended,
  a custom queue controller has no influence on where the pods of a job will actually land.This feature allows updating a Job's scheduling directives before it starts, which gives custom queue
  controllers the ability to influence pod placement while at the same time offloading actual
  pod-to-node assignment to kube-scheduler. This is allowed only for suspended Jobs that have never
  been unsuspended before.The fields in a Job's pod template that can be updated are node affinity, node selector,
  tolerations, labels, annotations and scheduling gates.Specifying your own Pod selectorNormally, when you create a Job object, you do not specify .spec.selector.
  The system defaulting logic adds this field when the Job is created.
  It picks a selector value that will not overlap with any other jobs.However, in some cases, you might need to override this automatically set selector.
  To do this, you can specify the .spec.selector of the Job.Be very careful when doing this. If you specify a label selector which is not
  unique to the pods of that Job, and which matches unrelated Pods, then pods of the unrelated
  job may be deleted, or this Job may count other Pods as completing it, or one or both
  Jobs may refuse to create Pods or run to completion. If a non-unique selector is
  chosen, then other controllers (e.g. ReplicationController) and their Pods may behave
  in unpredictable ways too. Kubernetes will not stop you
  ```