Question No. 1
Containers only need the namespaces functionality to run on a Linux system available since kernel 2.6.
Containers need a hypervisor to run on a Linux system. Cgroups namespaces are functionalities used for the kernel but not for running containers.
Containers only need the cgroups functionality for running on a Linux system. Namespaces is not a Linux kernel functionality needed for creating and managing containers.
Containers use the cgroups and namespaces functionalities to isolate processes and assign hardware resources to each of those isolated processes.