First, why hyper-v?
The reason for docker on windows using hyper-v VM just because: for a linux container, it had to share the linux kernel of host. But on windows, we do not have linux kernel, so docker set a hyper-v VM for you, then let your container to share the kernel.
Second, why not VM on linux?
But on linux, the host already has a linux kernel, so container can share this kernel without using any VM.
In fact, from next diagram you can see when you start a new container, it will auto new a process containerd-shim, it will run as a process which you can use ps aux | grep docker to see it on linux host.

And, finally, what is container?
Docker uses a technology called namespaces to provide the isolated workspace called the container. When you run a container, Docker creates a set of namespaces for that container, then every process in container will run in a separated namespace. See official docementation.