instruction: Create a Dockerfile for Node.js with production best practices
output: ```dockerfile
  from daemon: Container command 'foo' not found or does not exist.
  127
  Other exit codesAny exit code other than 125, 126, and 127 represent the exit code of the
  provided container command.
  
  $ docker run busybox /bin/sh -c 'exit 3'
  $ echo $?
  3
  Runtime constraints on resourcesThe operator can also adjust the performance parameters of the
  container:OptionDescription-m, --memory=""Memory limit (format: <number>[<unit>]). Number is a positive integer. Unit can be one of b, k, m, or g. Minimum is 6M.--memory-swap=""Total memory limit (memory + swap, format: <number>[<unit>]). Number is a positive integer. Unit can be one of b, k, m, or g.--memory-reservation=""Memory soft limit (format: <number>[<unit>]). Number is a positive integer. Unit can be one of b, k, m, or g.--kernel-memory=""Kernel memory limit (format: <number>[<unit>]). Number is a positive integer. Unit can be one of b, k, m, or g. Minimum is 4M.-c, --cpu-shares=0CPU shares (relative weight)--cpus=0.000Number of CPUs. Number is a fractional number. 0.000 means no limit.--cpu-period=0Limit the CPU CFS (Completely Fair Scheduler) period--cpuset-cpus=""CPUs in which to allow execution (0-3, 0,1)--cpuset-mems=""Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems.--cpu-quota=0Limit the CPU CFS (Completely Fair Scheduler) quota--cpu-rt-period=0Limit the CPU real-time period. In microseconds. Requires parent cgroups be set and cannot be higher than parent. Also check rtprio ulimits.--cpu-rt-runtime=0Limit the CPU real-time runtime. In microseconds. Requires parent cgroups be set and cannot be higher than parent. Also check rtprio ulimits.--blkio-weight=0Block IO weight (relative weight) accepts a weight value between 10 and 1000.--blkio-weight-device=""Block IO weight (relative device weight, format: DEVICE_NAME:WEIGHT)--device-read-bps=""Limit read rate
  ```