instruction: Create a Dockerfile for Node.js with production best practices
output: ```dockerfile
  from the
  kubelet, which is a daemon that runs
  on each node within the Kubernetes cluster. The kubeadm CLI tool is executed by the user when Kubernetes is
  initialized or upgraded, whereas the kubelet is always running in the background.
  Since the kubelet is a daemon, it needs to be maintained by some kind of an init
  system or service manager. When the kubelet is installed using DEBs or RPMs,
  systemd is configured to manage the kubelet. You can use a different service
  manager instead, but you need to configure it manually.
  Some kubelet configuration details need to be the same across all kubelets involved in the cluster, while
  other configuration aspects need to be set on a per-kubelet basis to accommodate the different
  characteristics of a given machine (such as OS, storage, and networking). You can manage the configuration
  of your kubelets manually, but kubeadm now provides a KubeletConfiguration API type for
  managing your kubelet configurations centrally.
  
  Kubelet configuration patterns
  The following sections describe patterns to kubelet configuration that are simplified by
  using kubeadm, rather than managing the kubelet configuration for each Node manually.
  Propagating cluster-level configuration to each kubelet
  You can provide the kubelet with default values to be used by kubeadm init and kubeadm join
  commands. Interesting examples include using a different container runtime or setting the default subnet
  used by services.
  If you want your services to use the subnet 10.96.0.0/12 as the default for services, you can pass
  the --service-cidr parameter to kubeadm:
  kubeadm init --service-cidr 10.96.0.0/12
  Virtual IPs for services are now allocated
  ```