instruction: Create a comprehensive Dockerfile for cluster applications with best practices
output: ```dockerfile
  from the remaining nodes that are unhealthy or unreachable).
  The node controller is also responsible for evicting pods running on nodes with
  NoExecute taints, unless those pods tolerate that taint.
  The node controller also adds taints
  corresponding to node problems like node unreachable or not ready. This means
  that the scheduler won't place Pods onto unhealthy nodes.
  Resource capacity tracking
  Node objects track information about the Node's resource capacity: for example, the amount
  of memory available and the number of CPUs.
  Nodes that self register report their capacity during
  registration. If you manually add a Node, then
  you need to set the node's capacity information when you add it.
  The Kubernetes scheduler ensures that
  there are enough resources for all the Pods on a Node. The scheduler checks that the sum
  of the requests of containers on the node is no greater than the node's capacity.
  That sum of requests includes all containers managed by the kubelet, but excludes any
  containers started directly by the container runtime, and also excludes any
  processes running outside of the kubelet's control.
  Note:If you want to explicitly reserve resources for non-Pod processes, see
  reserve resources for system daemons.
  Node topology
  
  FEATURE STATE: Kubernetes v1.27 [stable]
  
  If you have enabled the TopologyManager
  feature gate, then
  the kubelet can use topology hints when making resource assignment decisions.
  See Control Topology Management Policies on a Node
  for more information.
  Swap memory management
  
  FEATURE STATE: Kubernetes v1.30 [beta]
  
  To enable swap on a node, the NodeSwap feature gate must be enabled on
  the kubelet (default is true), and the --fail-swap-on command line flag or failSwapOn
  configuration setting
  must be set to false.
  To allow Pods to utilize swap, swapBehavior should not be set to NoSwap (which is the default behavior) in the kubelet config.
  Warning:When the memory swap feature is turned on, Kubernetes data such as the content
  of Secret objects that were written to tmpfs now could be swapped to disk.
  A user can also optionally configure memorySwap.swapBehavior in order to
  specify how a node will use swap memory. For example,
  memorySwap:
   swapBehavior: LimitedSwap
  
  NoSwap (default): Kubernetes workloads will not use swap.
  LimitedSwap: The utilization of swap memory by Kubernetes workloads is subject to limitations.
  Only Pods of Burstable QoS are permitted to employ swap.
  
  If configuration for memorySwap is not specified and the feature gate is
  enabled, by default the kubelet will apply the same behaviour as the
  NoSwap setting.
  With LimitedSwap, Pods that do not fall under the Burstable QoS classification (i.e.
  BestEffort/Guaranteed Qos Pods) are prohibited
  ```