Recientemente comencé a aprender Docker y parece que la mayor parte del trabajo pesado lo realiza el kernel de Linux, utilizando espacios de nombres y cgroups.
Algunas cosas que encuentro confusas son:
¿Cuál es la diferencia entre un espacio de nombres y un cgroup? ¿Cuáles son los diferentes casos de uso que abordan?
¿Qué ha implementado Docker además de esto para ganar popularidad?
Me gustaría conocer los aspectos internos de estas funciones y cómo se implementan.