instruction: Create a Dockerfile for Node.js with production best practices
output: ```dockerfile
  from dockershim.If you are running a version of Kubernetes other than v1.32,
  check the documentation for that version.Install and configure prerequisitesNetwork configurationBy default, the Linux kernel does not allow IPv4 packets to be routed
  between interfaces. Most Kubernetes cluster networking implementations
  will change this setting (if needed), but some might expect the
  administrator to do it for them. (Some might also expect other sysctl
  parameters to be set, kernel modules to be loaded, etc; consult the
  documentation for your specific network implementation.)Enable IPv4 packet forwardingTo manually enable IPv4 packet forwarding:# sysctl params required by setup, params persist across reboots
  cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
  net.ipv4.ip_forward = 1
  EOF
  
  # Apply sysctl params without reboot
  sudo sysctl --system
  Verify that net.ipv4.ip_forward is set to 1 with:sysctl net.ipv4.ip_forward
  cgroup driversOn Linux, control groups
  are used to constrain resources that are allocated to processes.Both the kubelet and the
  underlying container runtime need to interface with control groups to enforce
  resource management for pods and containers
  and set resources such as cpu/memory requests and limits. To interface with control
  groups, the kubelet and the container runtime need to use a cgroup driver.
  It's critical that the kubelet and the container runtime use the same cgroup
  driver and are configured the same.There are two cgroup drivers available:cgroupfssystemdcgroupfs driverThe cgroupfs driver is the default cgroup driver in the kubelet.
  When the cgroupfs driver is used, the kubelet and the container runtime directly interface with
  the cgroup filesystem to configure cgroups.The cgroupfs driver is not recommended when
  systemd is the
  init system because systemd expects a single cgroup manager on
  the system. Additionally, if you use cgroup v2, use the systemd
  cgroup driver instead of cgroupfs.systemd cgroup driverWhen systemd is chosen as the init
  system for a Linux distribution, the init process generates and consumes a root control group
  (cgroup) and acts as a cgroup manager.systemd has a tight integration with cgroups and allocates a cgroup per systemd
  unit. As a result, if you use systemd as the init system with the cgroupfs
  driver, the system gets two different cgroup managers.Two cgroup managers result in two views of the available and in-use resources in
  the system. In some cases, nodes that are configured to use cgroupfs for the
  kubelet and container runtime, but use systemd for the rest of the processes become
  unstable under resource pressure.The approach to mitigate this instability is to use systemd as the cgroup driver for
  the kubelet and the container runtime when systemd is the selected init system.To set systemd as the cgroup driver, edit the
  KubeletConfiguration
  option of cgroupDriver and set it to systemd. For example:apiVersion: kubelet.config.k8s.io/v1beta1
  kind: KubeletConfiguration
  ...
  cgroupDriver: systemd
  Note:Starting with v1.22 and later, when creating a cluster with kubeadm, if the user does not set
  the cgroupDriver field under KubeletConfiguration, kubeadm defaults it to systemd.If you configure systemd as the cgroup driver for the kubelet, you must also
  configure systemd as the cgroup driver for the container runtime. Refer to
  the documentation for your container runtime for instructions. For example:containerdCRI-OIn Kubernetes 1.32, with the KubeletCgroupDriver
  ```