instruction: Create a Dockerfile for Node.js with production best practices
output: ```dockerfile
  from proxying.See the Go specification
  for details on these variables.Option typesSingle character command line options can be combined, so rather than
  typing docker run -i -t --name test busybox sh,
  you can write docker run -it --name test busybox sh.BooleanBoolean options take the form -d=false. The value you see in the help text is
  the default value which is set if you do not specify that flag. If you
  specify a Boolean flag without a value, this will set the flag to true,
  irrespective of the default value.For example, running docker run -d will set the value to true, so your
  container will run in "detached" mode, in the background.Options which default to true (e.g., docker build --rm=true) can only be
  set to the non-default value by explicitly setting them to false:
  
  $ docker build --rm=false .
  MultiYou can specify options like -a=[] multiple times in a single command line,
  for example in these commands:
  
  $ docker run -a stdin -a stdout -i -t ubuntu /bin/bash
  
  $ docker run -a stdin -a stdout -a stderr ubuntu /bin/ls
  Sometimes, multiple options can call for a more complex value string as for
  -v:
  
  $ docker run -v /host:/container example/mysql
  
  NoteDo not use the -t and -a stderr options together due to
  limitations in the pty implementation. All stderr in pty mode
  simply goes to stdout.Strings and IntegersOptions like --name="" expect a string, and they
  can only be specified once. Options like -c=0
  expect an integer, and they can only be specified once.Configuration filesBy default, the Docker command line stores its configuration files in a
  directory called .docker within your $HOME directory.Docker manages most of the files in the configuration directory
  and you shouldn't modify them. However, you can modify the
  config.json file to control certain aspects of how the docker
  command behaves.You can modify the docker command behavior using environment
  variables or command-line options. You can also use options within
  config.json to modify some of the same behavior. If an environment variable
  and the --config flag are set, the flag takes precedent over the environment
  variable. Command line options override environment variables and environment
  variables override properties you specify in a config.json file.Change the .docker directoryTo specify a different directory, use the DOCKER_CONFIG
  environment variable or the --config command line option. If both are
  specified, then the --config option overrides the DOCKER_CONFIG environment
  variable. The example below overrides the docker ps command using a
  config.json file located in the ~/testconfigs/ directory.
  
  $ docker --config ~/testconfigs/ ps
  This flag only applies to whatever command is being ran. For persistent
  configuration, you can set the DOCKER_CONFIG environment variable in your
  shell (e.g. ~/.profile or ~/.bashrc). The example below sets the new
  directory to be HOME/newdir/.docker.
  
  $ echo export DOCKER_CONFIG=$HOME/newdir/.docker > ~/.profile
  Docker CLI configuration file (config.json) propertiesUse the Docker CLI configuration to customize settings for the docker CLI. The
  configuration file uses JSON formatting, and properties:By default, configuration file is stored in ~/.docker/config.json. Refer to the
  change the .docker directory section to use a
  different location.
  WarningThe configuration file and other files inside the ~/.docker configuration
  directory may contain sensitive information, such as authentication information
  for proxies or, depending on your credential store, credentials for your image
  registries. Review your configuration file's content before sharing with others,
  and prevent committing the file to version control.Customize the default output format for commandsThese fields lets you customize the default output format for some commands
  if no --format flag is provided.PropertyDescriptionconfigFormatCustom default format for docker config ls output. See
  docker config ls for a list of supported formatting directives.imagesFormatCustom default format for docker images / docker image ls output. See
  docker images for a list of supported formatting directives.networksFormatCustom default format for docker network ls output. See
  docker network ls for a list of supported formatting directives.nodesFormatCustom default format for docker node ls output. See
  docker node ls for a list of supported formatting directives.pluginsFormatCustom default format for docker plugin ls output. See
  docker plugin ls for a list of supported formatting directives.psFormatCustom default format for docker ps / docker container ps output. See
  docker ps for a list of supported formatting directives.secretFormatCustom default format for docker secret ls output. See
  docker secret ls for a list of supported formatting directives.serviceInspectFormatCustom default format for docker service inspect output. See
  docker service inspect for a list of supported formatting directives.servicesFormatCustom default format for docker service ls output. See
  docker service ls for a list of supported formatting directives.statsFormatCustom default format for docker stats output. See
  docker stats for a list of supported formatting directives.tasksFormatCustom default format for docker stack ps output. See
  docker stack ps for a list of supported formatting directives.volumesFormatCustom default format for docker volume ls output. See
  docker volume ls for a list of supported formatting directives.Custom HTTP headersThe property HttpHeaders specifies a set of headers to include in all messages
  sent
  ```
  
  ## Production Considerations
  
  ### Security Best Practices
  
  1. **Use non-root user**
  ```dockerfile
  # Create non-root user
  RUN addgroup -g 1001 -S nodejs && adduser -S nodejs -u 1001
  USER nodejs
  ```
  
  2. **Scan for vulnerabilities**
  ```bash
  # Scan container image
  docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy image <image_name>
  ```
  
  3. **Apply security policies**
  ```yaml
  apiVersion: v1
  kind: Pod
  spec:
    securityContext:
      runAsNonRoot: true
      runAsUser: 1001
      fsGroup: 1001
    containers:
    - name: app
      securityContext:
        allowPrivilegeEscalation: false
        readOnlyRootFilesystem: true
        capabilities:
          drop:
          - ALL
  ```
  
  ### Performance Optimization
  
  1. **Resource management**
  ```yaml
  resources:
    requests:
      memory: "128Mi"
      cpu: "100m"
    limits:
      memory: "256Mi"
      cpu: "200m"
  ```
  
  2. **Horizontal Pod Autoscaling**
  ```yaml
  apiVersion: autoscaling/v2
  kind: HorizontalPodAutoscaler
  metadata:
    name: app-hpa
  spec:
    scaleTargetRef:
      apiVersion: apps/v1
      kind: Deployment
      name: my-app
    minReplicas: 3
    maxReplicas: 10
    metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70
  ```
  
  ### Backup and Disaster Recovery
  
  1. **Data backup strategy**
  ```bash
  # Automated backup script
  kubectl create job --from=cronjob/backup-job backup-manual-$(date +%Y%m%d-%H%M%S)
  ```
  
  2. **Multi-region deployment**
  ```yaml
  # Anti-affinity rules
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - my-app
          topologyKey: kubernetes.io/zone
  ```