instruction: Create a Dockerfile for Node.js with production best practices
output: ```dockerfile
  from it and leave it running using
  the using CTRL-p CTRL-q key sequence. This detach key sequence is customizable
  using the detachKeys property. Specify a <sequence> value for the
  property. The format of the <sequence> is a comma-separated list of either
  a letter [a-Z], or the ctrl- combined with any of the following:a-z (a single lowercase alpha character )@ (at sign)[ (left bracket)\\ (two backward slashes)_ (underscore)^ (caret)Your customization applies to all containers started in with your Docker client.
  Users can override your custom or the default key sequence on a per-container
  basis. To do this, the user specifies the --detach-keys flag with the docker attach, docker exec, docker run or docker start command.CLI plugin optionsThe property plugins contains settings specific to CLI plugins. The
  key is the plugin name, while the value is a further map of options,
  which are specific to that plugin.Sample configuration fileFollowing is a sample config.json file to illustrate the format used for
  various fields:
  
  {
   "HttpHeaders": {
   "MyHeader": "MyValue"
   },
   "psFormat": "table {{.ID}}\\t{{.Image}}\\t{{.Command}}\\t{{.Labels}}",
   "imagesFormat": "table {{.ID}}\\t{{.Repository}}\\t{{.Tag}}\\t{{.CreatedAt}}",
   "pluginsFormat": "table {{.ID}}\t{{.Name}}\t{{.Enabled}}",
   "statsFormat": "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}",
   "servicesFormat": "table {{.ID}}\t{{.Name}}\t{{.Mode}}",
   "secretFormat": "table {{.ID}}\t{{.Name}}\t{{.CreatedAt}}\t{{.UpdatedAt}}",
   "configFormat": "table {{.ID}}\t{{.Name}}\t{{.CreatedAt}}\t{{.UpdatedAt}}",
   "serviceInspectFormat": "pretty",
   "nodesFormat": "table {{.ID}}\t{{.Hostname}}\t{{.Availability}}",
   "detachKeys": "ctrl-e,e",
   "credsStore": "secretservice",
   "credHelpers": {
   "awesomereg.example.org": "hip-star",
   "unicorn.example.com": "vcbait"
   },
   "plugins": {
   "plugin1": {
   "option": "value"
   },
   "plugin2": {
   "anotheroption": "anothervalue",
   "athirdoption": "athirdvalue"
   }
   },
   "proxies": {
   "default": {
   "httpProxy": "http://user:pass@example.com:3128",
   "httpsProxy": "https://my-proxy.example.com:3129",
   "noProxy": "intra.mycorp.example.com",
   "ftpProxy": "http://user:pass@example.com:3128",
   "allProxy": "socks://example.com:1234"
   },
   "https://manager1.mycorp.example.com:2377": {
   "httpProxy": "http://user:pass@example.com:3128",
   "httpsProxy": "https://my-proxy.example.com:3129"
   }
   }
  }Experimental featuresExperimental features provide early access to future product functionality.
  These features are intended for testing and feedback, and they may change
  between releases without warning or can be removed
  ```