Ein Container nutzt den Kernel vom Host, somit hast du mehr Abhängigkeiten vom Host, aber weniger Ressourcenbedarf.
Eine VM, ist eine eigenständige Laufzeitumgebung für ein Betriebssystem, wo du dann deinen eigenen Kernel installierst und auch andere Betriebssystem wie z.B. Windows nutzen kannst.