Docker containers

When we talk about containers in the Docker world, we are technically talking about Linux containers. As stated by Red Hat on their website (https://www.redhat.com/en/topics/containers/whats-a-linux-container):

A Linux container is a set of processes that are isolated from the rest of the system, running from a distinct image that provides all files necessary to support the processes. By providing an image that contains all of an application’s dependencies, it is portable and consistent as it moves from development to testing, and finally to production.

Though the concept is not new, Docker makes it possible to create containers that are easy to build, deploy, version, and share. A Docker container only contains dependencies that are required for the application to run on the host OS; it shares the OS and other dependencies for the host system hardware. This makes a Docker container lighter than a virtual machine (VM) in terms of size and resource usage as it doesn't have to ship an entire OS and emulate virtual hardware. Hence, Docker made virtual machines obsolete in many of the traditional use cases that were handled using VM technologies. This also means that, with Docker, we will be able to run more applications on the same hardware compared to running with VMs. Docker containers are instances of a docker image, which is a set of layers which describes the application that is being containerized. They contain the code, runtime, libraries, environment variables, and configuration files needed to run the application.