A VM virtualises hardware and runs a guest kernel. A container is (roughly) a process with namespaces and cgroups. It shares the host’s kernel.
That is why images start quickly. That is why “Windows container vs Linux container” is a real constraint. That is why “the container has its own localhost” still confuses everyone, including me, more often than it should.
I stopped saying “the Docker VM” unless I actually mean Docker Desktop’s Linux VM on macOS/Windows. On a Linux server, there usually is not one.