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:LinuxWindowsLinux container runtimesRuntimePath to Unix domain socketcontainerdunix:///var/run/containerd/containerd.sockCRI-Ounix:///var/run/crio/crio.sockDocker Engine (using cri-dockerd)unix:///var/run/cri-dockerd.sockWindows container runtimesRuntimePath to Windows named pipecontainerdnpipe:////./pipe/containerd-containerdDocker Engine (using cri-dockerd)npipe:////./pipe/cri-dockerdInstalling kubeadm, kubelet and kubectlYou 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
  ```