I recently started learning docker and it seems that most of the heavy lifting is done by the Linux kernel, using namespaces and cgroups.
A few things which I am finding confusing are:
What is the difference between a namespace and a cgroup? What are the different use cases they address?
What has docker implemented on top this these to gain popularity ?
I would like to know the internals of these features and how they are implemented.