Containerization #

What is containerization? #

The principles of hypervision that form the foundation of cloud hosting have recently been ported to the operating system level. OS-level virtualization, also known as container-based virtualization, is a new technology that divides a machine, regardless of whether this is a physical or virtual machine, into multiple virtual instances, called containers.

To the user, containers feel the same as traditional virtual machines. However, unlike VMs, containers are very lightweight since they share their kernel with the underlying operating system. By eliminating an additional OS layer, containers have a much lower overhead on the host machine, are significantly smaller in size, and as a result, allow for rapid instantiation and replication.

The combination of virtual machines and containers form the basis of contemporary cloud computing, where a high level of scalability and flexibility is inherited from hypervisor-based virtualization on two levels.

There are several implementations of container-based virtualization. Some of the most popular ones in terms of adoption are LXC, Mesos containerizer, Rkt, and Docker. Especially the latter one has drawn great attention from the IT industry in the recent years.

What is Docker? #

Docker is an open source project that was initially released in 2013 by Docker, Inc. Since then, it has grown into a rich ecosystem of both free and premium products that enable software developers to package up their applications inside containers and deploy them on a wide range of machines in an accessible way.

There are four main components of Docker:

  1. Docker images: You can think of Docker images as read-only templates that define how a given application can be installed on a machine. An image typically contains the source code of the application, some configuration files, and any system library or external dependencies the application needs.
  2. Docker registries: Docker registries are hosted repositories that hold a collection of Docker images. The registries can be either public, such as Docker Hub, or private. By uploading your Docker image to a registry, you can download the image on any machine you like to install your application on.
  3. Docker containers: Docker containers are running instances of a Docker image. Each container started from a given Docker image is identical, which means that you can easily transfer your application to a different deployment, or scale your application by increasing the number of containers.
  4. Docker engine: The Docker engine is a daemon running on your deployment and is responsible for tasks such as authenticating with Docker registries, downloading Docker images, and starting and stopping Docker containers.

If you are new to Docker, this might all seem a little overwhelming. Luckily, as you will learn from the remainder of this documentation, Smoothy takes care of all this complexity for you. 😌