instruction: Create a comprehensive Dockerfile for cluster applications with best practices
output: ```dockerfile
  from the kubelet in version 1.24.
  
  The tables below include the known endpoints for supported operating systems:
  Linux
  Windows
  
  Linux container runtimes
  
  Runtime
  Path to Unix domain socket
  
  containerd
  unix:///var/run/containerd/containerd.sock
  
  CRI-O
  unix:///var/run/crio/crio.sock
  
  Docker Engine (using cri-dockerd)
  unix:///var/run/cri-dockerd.sock
  
  Windows container runtimes
  
  Runtime
  Path to Windows named pipe
  
  containerd
  npipe:////./pipe/containerd-containerd
  
  Docker Engine (using cri-dockerd)
  npipe:////./pipe/cri-dockerd
  
  Installing kubeadm, kubelet and kubectl
  You will install these packages on all of your machines:
  
  kubeadm: the command to bootstrap the cluster.
  
  kubelet: the component that runs on all of the machines in your cluster
  and does things like starting pods and containers.
  
  kubectl: the command line util to talk to your cluster.
  
  kubeadm will not install or manage kubelet or kubectl for you, so you will
  need to ensure they match the version of the Kubernetes control plane you want
  kubeadm to install for you. If you do not, there is a risk of a version skew occurring that
  can lead to unexpected, buggy behaviour. However, one minor version skew between the
  kubelet and the control plane is supported, but the kubelet version may never exceed the API
  server version. For example, the kubelet running 1.7.0 should be fully compatible with a 1.8.0 API server,
  but not vice versa.
  For information about installing kubectl, see Install and set up kubectl.
  
  Warning: These instructions exclude all Kubernetes packages
  ```