Scalability, high availability, containers, fault tolerance and eventual consistency. Tech terms can be confusing to those new to server administration or development. In the coming weeks, we’ll be breaking down common — yet potentially confusing — terms you will undoubtedly come across in your learning journey.
With the advent of platforms such as Docker, containers are an oft-spoken term in system administration and programming. But what are containers? At a base level, someone new to containers might understand they “contain” an application, but how does it work? What are the benefits and use-cases?
Containers can generally be separated into two types: Operating system (OS) and application containers. OS containers work in a way similar to virtualization (regarding results), with multiple “virtual machines” on top of a single server, while application containers exist to run applications or isolated segments of applications in contained portions of a server. Both forms of containers rely on sharing a kernel with the base system.
Because containers share a kernel with the host system, containers are considered a lightweight and efficient way of running various distributions on top of a single system. It should be noted, however, that you cannot share kernels between incompatible systems: Debian, for example, cannot run on a contain on top of a Windows system.
When using containers for applications, it separates the application from the implementation process, creating a platform-agnostic environment that increases the portability of the application. Often, the different components of the application itself are broken down into containers, each communicating with one another through APIs or supported protocols. This limits any potential conflicts between applications.
Isolation is a vital part of containers, although because of the shared kernel, is it not as strict an isolation as using a hypervisor. Containers isolate processes and resources such as CPU and memory between the host and any guests, and are also entirely self-contained. Any container on a host system cannot see into any other container located on that system.
Containers as a whole open up a new — or at least alternate — way of managing their systems and applications, and can be an incredibly powerful tool for any user.