Tuesday 12 March 2019

Introduction to Docker

Definition
Docker is the platform that provides an isolated environment to run/deploy your application in the form of containers. 

It separates the code from the infrastructure so that developer can concentrate on code only and don't worry about the different environment issues.
In Docker, we ship our containers (along with code) and thus if it worked on one deployment environment (say development / test), it will also work on other environment (say production). There is huge advantage of docker in this context, the process of application release will be much faster.

Features / Advantages
Use of docker container bring multiple advantage over traditional application deployment:
(a) Since docker separates code from infrastructure, developer can concentrate on issue related to application only
(b)  As in docker, we ship containers, all the issues we faced due to different environment will not be there
(c) It virtualizes host operating system rather than hardware, so it is much faster than traditional virtual machines

(d) We can run more instance of application using docker rather than virtual machines. Infact we can run containers inside virtual machines also
(e) There is one great advantage for docker is that we can break monolithic application to multiple micro-services, hence each component is independently deployable without affecting others. So, we have the bug in UI, we dont need to build / deploy whole application, only container / microservice for UI needs to be updated.
(f) we can spin up multiple containers in separate isolated environment using docker thus providing a sort of Highly Availability. This comes handy in a single node environment and we need to update application and if we have multiple containers for same application we can down one to update then up it and then update for other containers resulting in no downtime.

Docker is one of the important part of DevOps where it handles code deployment in an intelligent way.

Conclusion
In short, docker comes handy to 
  • Isolate infrastructure / different environment issue, 
  • Faster code deployment, 
  • Faster processing of application using same hardware resource, 
  • Dividing monolithic application to independent deployable microservices,
  • Minimize application downtime to zero,
  • Easy clustering multiple containers to use as HA and Load balancer both.