instruction: Create a comprehensive Dockerfile for cluster applications with best practices
output: ```dockerfile
  from network sessions inside or outside of
  your cluster.
  kube-proxy uses the operating system packet filtering layer if there is one
  and it's available. Otherwise, kube-proxy forwards the traffic itself.
  If you use a network plugin that implements packet forwarding for Services
  by itself, and providing equivalent behavior to kube-proxy, then you do not need to run
  kube-proxy on the nodes in your cluster.
  Container runtime
  A fundamental component that empowers Kubernetes to run containers effectively.
  It is responsible for managing the execution and lifecycle of containers within the Kubernetes environment.
  Kubernetes supports container runtimes such as
  containerd, CRI-O,
  and any other implementation of the Kubernetes CRI (Container Runtime
  Interface).
  Addons
  Addons use Kubernetes resources (DaemonSet,
  Deployment, etc) to implement cluster features.
  Because these are providing cluster-level features, namespaced resources for
  addons belong within the kube-system namespace.
  Selected addons are described below; for an extended list of available addons,
  please see Addons.
  DNS
  While the other addons are not strictly required, all Kubernetes clusters should have
  cluster DNS, as many examples rely on it.
  Cluster DNS is a DNS server, in addition to the other DNS server(s) in your environment,
  which serves DNS records for Kubernetes services.
  Containers started by Kubernetes automatically include this DNS server in their DNS searches.
  Web UI (Dashboard)
  Dashboard is a general purpose,
  web-based UI for Kubernetes clusters. It allows users to manage and troubleshoot applications
  running in the cluster, as well as the cluster itself.
  Container resource monitoring
  Container Resource Monitoring
  records generic time-series metrics about containers in a central database, and provides a UI for browsing that data.
  Cluster-level Logging
  A cluster-level logging mechanism is responsible
  for saving container logs to a central log store with a search/browsing interface.
  Network plugins
  Network plugins
  are software components that implement the container network interface (CNI) specification.
  They are responsible for allocating IP addresses to pods and enabling them to communicate
  with each other within the cluster.
  Architecture variations
  While the core components of Kubernetes remain consistent, the way they are deployed and
  managed can vary. Understanding these variations is crucial for designing and maintaining
  Kubernetes clusters that meet specific operational needs.
  Control plane deployment options
  The control plane components can be deployed in several ways:
  
  Traditional deployment
  Control plane components run directly on dedicated machines or VMs, often managed as systemd services.
  Static Pods
  Control plane components are deployed as static Pods, managed by the kubelet on specific nodes.
  This is a common approach used by tools like kubeadm.
  Self-hosted
  The control plane runs as Pods within the Kubernetes cluster itself, managed by Deployments
  and StatefulSets or other Kubernetes primitives.
  Managed Kubernetes services
  Cloud providers often abstract away the control plane, managing its components as part of their service offering.
  
  Workload placement considerations
  The placement of workloads, including the control plane components, can vary based on cluster size,
  performance requirements, and operational policies:
  
  In smaller or development clusters, control plane components and user workloads might run on the same nodes.
  Larger production clusters often dedicate specific nodes to control plane components,
  separating them
  ```