Containers provide operating system level virtualization by running processes in isolated environments, usually also managing resource allocations like CPU shares and RAM. A container runtime enables users to make effective use of these mechanisms by providing APIs and tooling that abstract the low level technical details.