
Containers – the concept and basics
Containers are a mechanism to run software reliably even when moving them from one computer environment to another. The open sources project Docker in Linux has provided such a service for some years now. It containerizes the application and its dependencies (OS and underlying infrastructure) and abstracts the interaction between each; they isolate applications from each other but use a shared OS. This idea works based on the microservice design of services, because it performs as a service that is independent, flexible, and scalable by default, using predefined APIs for communications:

The basic features of containers are as follows:
- They are run-everywhere apps
- They are developed on a microservice-style architecture
- They enable a higher density of resources
The generic platform for running these containerized applications is Docker, which is available for the following:
- Windows containers
- Docker for Linux
- Docker for Mac
- Boot2Docker
- VirtualBox
In this chapter, we will focus on Linux and Windows containers. With the launch of Window Server 2016, we had two different version of containers in Windows—Hyper-V and generic containers. As the concept of Hyper-V containers has since been deprecated, we will not waste time on this concept any further.
The following image describes the design on container services on a high level:
