first distinction is between the container engine and the container orchestrator.
docker
is a container engine, it makes you build and run usually no more than one container at most, locally on your PC for development purposes.
docker-compose
is a Docker utility to run multiple containers and let them share volumes and networking via the docker engine features, runs locally to emulate service composition and remotely on clusters.
Kubernetes is a container orchestration platform, it takes care of running containers and enhancing the engine features so that containers can be composed and scaled to serve complex applications (sort of PaaS, managed by you or cloud provider). Main Kubernetes feature is to decouple infrastructure from application using containers, and it's also open for other engines that Docker, for example it can run containers with rkt or cri-o.
Docker cloud is also a PaaS offer that will let you run and orchestrate containers through the docker
engine API.
Now depending on your needs, level of control on infrastructure and target audience you can use either Kubernetes on baremetal, or Azure ACS or Google GKE, etc...
Hope this helped :)
Regards