la prima distinzione è tra il motore contenitore e l'orchestrator contenitore.
docker
è un motore contenitore, ti consente di creare ed eseguire di solito non più di un contenitore al massimo, localmente sul tuo PC a scopo di sviluppo.
docker-compose
è un'utilità Docker per eseguire più contenitori e consentire loro di condividere volumi e reti tramite le funzionalità del motore docker, viene eseguita localmente per emulare la composizione del servizio e in remoto sui cluster.
Kubernetes è una piattaforma di orchestrazione di container, che si occupa della gestione dei container e del miglioramento delle funzionalità del motore in modo che i container possano essere composti e ridimensionati per servire applicazioni complesse (specie di PaaS, gestite da te o dal fornitore di servizi cloud). La principale funzione di Kubernetes è quella di disaccoppiare l'infrastruttura dall'applicazione usando i container, ed è anche aperta per altri motori che Docker, ad esempio può far funzionare container con rkt o cri-o.
Docker cloud è anche un'offerta PaaS che ti consentirà di eseguire e orchestrare container attraverso l' docker
API del motore.
Ora, in base alle tue esigenze, al livello di controllo sull'infrastruttura e al pubblico di destinazione, puoi usare Kubernetes su baremetal, Azure ACS o Google GKE, ecc ...
Spero che questo abbia aiutato :) Saluti