History of containers in Linux kernel
This page describes history of containers in Linux kernel as technology in opposite to page with project history.
Contents
TODO
- chroot() was added (?)
- Mount namespaces (mount points, filesystems etc.)
- UTS (Unix Time Sharing) namespaces
- sysname
- nodename
- release
- version
- machine
- domainname
- IPC (System V IPC resources)
- User namespaces (UID, GID)
- unshare[1]
- clone[2]
- namespaces[3]
2004
- Cpusets[4] appeared in version 2.6.12 of the Linux kernel. Cpusets provide a mechanism for assigning a set of CPUs and Memory Nodes to a set of tasks.
2006
- It was Paul Menage’s approach[5] in 2006 of adapting the cpusets mechanism already in the mainline kernel that really moved containerization on Linux forward, requiring minimally intrusive changes with little impact on performance, code quality, complexity, and future compatibility. The result was generic process containers, which were later renamed control groups, or cgroups, to reflect the fact that “this code is an important part of a container solution… it’s far from the whole thing.” Cgroups allow processes to be grouped together, and ensure that each group gets a share of memory, CPU and disk I/O; preventing any one container from monopolizing any of these resources. Kernel namespaces are another key part of a container solution, with Red Hatter Eric W. Biederman’s 2008 user namespaces patches being arguably the most complex and one of the most important namespaces in the context of containers. The implementation of user namespaces allows a process to have it’s own set of users and in particular to allows a process root privileges inside a container, but not outside.
2007
- Sep 2007: NET namespaces A network namespace is logically another copy of the network stack, with its own routes, firewall rules, and network interfaces. The network namespace is represented by struct net (defined in include/net/net_namespace.h).
- Jul 2007: PID namespaces. Implemented in kernel/pid_namespace.c [6][7] PID namespaces.
2008
2014
References
- ↑ http://man7.org/linux/man-pages/man2/unshare.2.html
- ↑ http://man7.org/linux/man-pages/man2/clone.2.html
- ↑ http://man7.org/linux/man-pages/man7/namespaces.7.html
- ↑ cpusets(7)
- ↑ Adding Generic Process Containers to the Linux Kernel
- ↑ PID namespaces patches
- ↑ pid namespaces: introduce struct upid
- ↑ Memory controller: cgroups setup
- ↑ cgroups: implement device whitelist
- ↑ NFS client virtualization plan
- ↑ NFS client virtualization plan v2
See also
- Not so brief history of Linux Containers - Kir Kolyshkin (slides, video)
- The History of Containers