A primeira distinção é entre o mecanismo do contêiner e o orquestrador de contêineres.
docker
é um mecanismo de contêiner, faz com que você construa e execute normalmente não mais que um contêiner, no máximo, localmente no seu PC para fins de desenvolvimento.
docker-compose
é um utilitário do Docker para executar vários contêineres e permitir que eles compartilhem volumes e redes através dos recursos do mecanismo do docker, executa localmente para emular a composição do serviço e remotamente nos clusters.
O Kubernetes é uma plataforma de orquestração de contêineres, que cuida da execução de contêineres e aprimora os recursos do mecanismo para que os contêineres possam ser compostos e dimensionados para atender a aplicativos complexos (tipo de PaaS, gerenciado por você ou por um provedor em nuvem). O principal recurso do Kubernetes é dissociar a infraestrutura do aplicativo usando contêineres e também está aberto para outros mecanismos que o Docker, por exemplo, pode executar contêineres com rkt ou cri-o.
A nuvem do Docker também é uma oferta PaaS que permite executar e orquestrar contêineres por meio da docker
API do mecanismo.
Agora, dependendo de suas necessidades, nível de controle na infraestrutura e público-alvo, você pode usar o Kubernetes no baremetal, ou o Azure ACS ou o Google GKE, etc ...
Espero que isso tenha ajudado :) Atenciosamente