Docker is an open-source project for building, shipping, and running programs. It is a command-line program, a background process, and a set of remote services that take a logistical approach to solving common software problems and simplifying your experience of installing, running, publishing, and removing software. It accomplishes this by using an operating system technology called containers.
Before talking about Docker, I need to say a few words about containerization technology.
Containers are a way to package an application and all of its dependencies into a single image. This image runs in an isolated environment that does not affect the host operating system. Containers allow you to separate the application from the infrastructure: developers do not need to think about what environment their application will run in, and whether there will be the necessary settings and dependencies. They simply create an application and package all the dependencies and settings into a single image. This image can then be run on other systems without worrying that the application will not run.
Docker is a platform for developing, delivering, and running containerized applications. Docker allows you to create containers, automate their launch and deployment, and manage the life cycle. It allows you to run multiple containers on a single host machine.
Containerization is similar to virtualization, but they are not the same. Virtualization works like a separate computer, with its own virtual hardware and operating system. In this case, you can run another OS inside one OS. In the case of containerization, the virtual environment runs directly from the kernel of the main operating system and does not virtualize the hardware. This means that the container can only run on the same OS as the main one. At the same time, since containers do not virtualize hardware, they consume much fewer resources.
Most modern applications have similar setups. They all use a combination of different technologies to assemble a complete application functionality. An example would be an app that uses a combination of following services:
These technologies each have a version the application depends on, also the application isn't an isolated thing that just floats around. It needs to run in an environment, since the environment can differ in OS, version, hardware, etc, it's obvious that the application and its technologies with their respective versions should work the same in different environments. Without docker, this means that each environment that the application runs on (local dev environment, a test or production server) needs to be configured with the correct versions of these services so that the application can run properly.
So the following problems arise
Docker Solution