Linux containers have taken infrastructure computing by storm. What started with Linux VServer, OpenVZ, cgroups, and LXC has gained momentum with the rise of Docker. You can think of a container as a lightweight VM that virtualizes the Linux kernel instead of hardware. This up-leveling of the virtualization brings in better performance, high density, and portability across clouds, whether public, private, or hybrid.
Containers are like VMs in many respects but are typically used for running individual daemons or services rather than multiple services or monolithic applications. Containers make creating and upgrading applications easy, but also introduce complexity via the increased number of instances and interdependencies to manage. This complexity gave rise to container orchestration systems like Mesos, Docker Swarm, and Kubernetes.