Docker is a computer program that enables virtualization at the level of the operating system, the so-called containerization. It was first released in 2013 and it is developed by Docker, Inc.

Docker is used to run software packages called containers. Containers are isolated and combine their own tools, libraries and configuration files. They can communicate through well-defined channels. All containers are launched by one core of the operating system which means that they are lighter than virtual machines. Containers are made of images specifying their exact content. Images are often created by combining and modifying standard images downloaded from public repositories.


It was Solomon Hykes who started making Docker in France like an internal project of dotCloud, a company that has profiled itself in platform-as-a-service services. The software was introduced to the public in Santa Clara at PyCon in 2013 and in March 2013 it was released as an open source.


Docker was developed primarily for Linux, where it uses functions to isolate Linux OS core such as cgroups or namespaces. At the same time, it uses file management systems and other systems to create independent containers that can be run in a single Linux instance without need to use virtual resources. Linux kernel support for namespaces isolates the application view of the operating environment, including process trees, networks, user data and file management systems.

The advantages of the use of Docker

  • Full control over the application’s product environment. Docker can include the necessary architecture such as JRE, application server, VM arguments and other environment variables that the applications needs to run. The infrastructure can be simply modified, independently of the development team, because they don’t need to wait for the operation team to change the environment.
  • Risk reduction. The tests are launched against the same image that will finally run on the production sever. This increases the test’s reliability. In addition, releases are less dangerous, because they only launch the same image on the production server that was launched for tests and other stages of development, such as pre-production systems, acceptance tests or capacity tests.
  • Less demanding maintenance. Environment creation is automatised, thus saving time for the operating team and increasing reliability.
  • Simple creation of multiple instances. Docker allows us to create a new instance using just running an image on servers. This makes it easy to add additional nodes to the cluster and to scale horizontally.
  • Simple updating of existing applications and environments. Usual procedures using, for example, installation scripts are often at risk when used in an existing environment. Using Docker, it is possible to simply turn off the container and to start the updated one.

The disadvantages of using Docker

  • Increased complexity. Using the next layer increases complexity, which can affect deployment, development and build.
  • Demanding administration of a larger amount of containers. Managing larger amount of containers is difficult, especially if they are clustered. This can be partly offset by using tools such as Google Kubernetes or Apache Mesos.
  • Resource sharing. The containers share the same OS core and are less isolated than a real virtual machine. One fault in the core can affect each of the containers.
  • Incompatibility with other operating systems. Because the Docker is built on Linux Containers, which is Linux technology, it is not possible to run the Docker directly on other systems and the container is always Linux. Boot2Docker allows use for Windows or MacOS X using VirtualBox. Docker client thus runs on the host OS and communicates with the Docker daemon inside VirtualBox. But it is a less comfortable solution and its everyday use is somewhat clumsy and far more complicated than the native use of Docker.
  • The difficulty of introducing. The initial introduction of Docker can be challenging and it can take a lot of time. It is necessary to assess whether the project is worth the effort and the increase of complexity.