# Linux Kernel Features

In addition to the two core components of the Docker architecture, it also uses the following features: - [Namespaces](#namespaces) - [Control Groups](#control-groups) - [UnionFS](#unionfs) ## Namespaces Namespaces allow for a high-level process isolation of a system's resources. These are logical separation of container workloads. Here are some types of namespaces: - [PID namespace](#pid-namespace) - [Net namespace](#net-namespace) - [IPC namespace](#ipc-namespace) - [MNT namespace](#mnt-namespace) - [UTS namespaces](#uts-namespaces) ### PID namespace Handles process isolation (PID: Process ID). This means that each namespace has its own process ID. ### Net namespace Isolates the network stack and manages the network interfaces. Each namespace has its own private set of IP addresses, firewall, routing tables, etc. ### IPC namespace Allows processes to be isolated from SysV interprocess communication. ### MNT namespace Manages the filesystem mountpoints. ### UTS namespaces UTS or Unix Timesharing System isolates the hostname, kernel, and version identifiers. ## Control Groups This is used by Docker to limit resource allocation. This ensures that a process doesn't consume the entire resources of a system. - **Resource limiting** - groups ca be set to not exceed a configured memory limit - **Prioritization** - some groups may get a larger share of CPU utilization or disk I/O throughput - **Accounting** - measures a group's resource usage - **Control** - freezing groups of processes ## UnionFS The Union filesystem upkeeps the overall sizes of the containers. It starts with a base image and then merges in any changes. - **Merging** - overlay filesystem branches to merge changes - **Read/Write** - branches can be read-only(RO) or read-write(RW) How it works: - when you create a container for the first time, you have a starting image - this image is a set of files that makes up the base image - as you add and remove packages, these changes create different layers - each layer is a set of file changes - these file changes are then merged by the UnionFS to the previous layer