Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

difference between cgroups and namespaces

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:

  1. What is the difference between a namespace and a cgroup? What are the different use cases they address?

  2. What has docker implemented on top this these to gain popularity ?

  3. I would like to know the internals of these features and how they are implemented.

like image 732
InsatiableTraveller Avatar asked Jan 15 '16 21:01

InsatiableTraveller


People also ask

What are cgroups in Docker?

Control Groups (cgroups) are a feature of the Linux kernel that allow you to limit the access processes and containers have to system resources such as CPU, RAM, IOPS and network. In this lab you will use cgroups to limit the resources available to Docker containers.

How many namespaces are there in Docker?

There are 6 types of namespaces: 1.

What can cgroups do?

Cgroups allow you to allocate resources — such as CPU time, system memory, network bandwidth, or combinations of these resources — among user-defined groups of tasks (processes) running on a system.

Does Docker have namespace?

Docker uses namespaces of various kinds to provide the isolation that containers need in order to remain portable and refrain from affecting the remainder of the host system. Each aspect of a container runs in a separate namespace and its access is limited to that namespace.


1 Answers

The proper links for those two notions have been fixed in PR 14307:

Under the hood, Docker is built on the following components:

The cgroups and namespaces capabilities of the Linux kernel

With:

  • cgroup: Control Groups provide a mechanism for aggregating/partitioning sets of tasks, and all their future children, into hierarchical groups with specialized behaviour.
  • namespace: wraps a global system resource in an abstraction that makes it appear to the processes within the namespace that they have their own isolated instance of the global resource.

In short:

  • Cgroups = limits how much you can use;
  • namespaces = limits what you can see (and therefore use)

See more at "Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic" by Jérôme Petazzoni.

Cgroups involve resource metering and limiting:

  • memory
  • CPU
  • block I/O
  • network

Namespaces provide processes with their own view of the system

Multiple namespaces:

  • pid
  • net
  • mnt
  • uts
  • ipc
  • user: userns it is graduating from experimental in docker 1.10
    (per-daemon-instance remapping of container root to an unprivileged user is in progress: PR 12648: see its design)
like image 56
VonC Avatar answered Oct 05 '22 13:10

VonC