Before [Over the years…]
For the one’s working in software development would have met at least once or more the scenario where an end to end system needs to be setup having frontend sever, database, a messaging system, backend, orchestration tool (example Ansible).
Lot of things used to create problems..
- COMPATIBILITY of all these different services with underlying Operating System
- Compatibility between the services and Library and Dependencies on the Operating System. One service could require one version of the library and the other service requires another version of the same library.
- Setting up a new environment would take a lot of time.
- Different development, staging and production environment. We cannot guarantee that application built would work the same way in different environment.
Thus all this made developing, building and shipping the application very difficult over the years.
So something is needed that could help us with compatibility issue, help us when we modify one component without affecting other component etc.
Now [Containers…]
With docker each application could be built and run in a different container with its own libraries and dependencies but all the containers running on same VM and Operating System.
The docker configuration has to be built once and thus all developers can then get started.
The developers just need to have docker installed and with docker run command each c container can be launched. Thus eliminating long setup time which were spent by developers before.
Thus, what cannot happen is a windows based container on a docker host with linux OS on it. For this you would need a docker running on windows OS.
This is not a disadvantage of docker because purpose of docker is to containerize applications, ship them and run the applications.
Before …
Developers used to develop application and Operations team used to deploy it with the provided package and by reading documents guide.
Operations team used to struggle a lot since they didn’t develop the application and guide does not tell everything.
Now …
With docker, major portion of the work is in the hands of developer in the form of a docker file.
Docker file can be used to create docker image for the application and this image can then be run on any container platform.
Operation team can use the image to deploy the application. If the image was built with the proper URL’s (production related) then operations team does not have to modify it and hence it will work out of the box just with docker run.
Thus if we talk about the current times, container based applications have resulted at least in the following advantages
- Reduced Setup Time when starting from scratch
- Compatibility/Dependencies between different services and OS
References:
- KodeKloud web
- Docker web https://www.docker.com