La primera distinción es entre el motor del contenedor y el orquestador del contenedor.
docker
es un motor de contenedor, te hace construir y ejecutar generalmente no más de un contenedor como máximo, localmente en tu PC para fines de desarrollo.
docker-compose
es una utilidad Docker para ejecutar múltiples contenedores y les permite compartir volúmenes y redes a través de las características del motor Docker, se ejecuta localmente para emular la composición del servicio y de forma remota en clústeres.
Kubernetes es una plataforma de orquestación de contenedores, se encarga de ejecutar contenedores y mejorar las características del motor para que los contenedores se puedan componer y escalar para servir aplicaciones complejas (tipo de PaaS, administrado por usted o el proveedor de la nube). La característica principal de Kubernetes es desacoplar la infraestructura de la aplicación que usa contenedores, y también está abierta para otros motores que Docker, por ejemplo, puede ejecutar contenedores con rkt o cri-o.
Docker Cloud también es una oferta de PaaS que le permitirá ejecutar y orquestar contenedores a través de la docker
API del motor.
Ahora, según sus necesidades, el nivel de control de la infraestructura y el público objetivo, puede usar Kubernetes en baremetal, Azure ACS o Google GKE, etc.
Espero que esto haya ayudado :) Saludos