How software deployment has evolved over time?

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..

  1. COMPATIBILITY of all these different services with underlying Operating System
  2. 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.
  3. Setting up a new environment would take a lot of time.
  4. Different development, staging and production environment. We cannot guarantee that application built would work the same way in different environment.

Screen Shot 2019-02-03 at 18.59.11

 

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.

Screen Shot 2019-02-03 at 19.52.37

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.

Screen Shot 2019-02-03 at 19.52.27

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.

Screen Shot 2019-02-03 at 20.21.12

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.

Screen Shot 2019-02-03 at 20.30.33

Screen Shot 2019-02-03 at 20.30.49

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.

Screen Shot 2019-02-03 at 20.31.01

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:

  1. KodeKloud web
  2. Docker web https://www.docker.com

 

Container Management Platforms

This blog post will talk about containers & different container platforms available (mainly Kubernetes & docker swarm).

What is docker?

I have already talked about what docker is in one of my post:- Docker Basics but to give you a refresh -> Docker is a tool that helps you create, build and deploy applications regardless of the machine.

Thanks to the container based application running which allows developer/dev-ops to package the entire application as one including all the libraries and dependencies & deliver it as one package which can run on any machine.

What is the role of containers?

Containers allow the application to be packaged into one which facilitates for quick deployment & scalability amongst other benefits.

screen shot 2019-01-29 at 20.52.40

With docker – we can create and distribute containerized application but with lots of container up and running

  • how do we manage all the different containers?
  • how to scale container instances?
  • how can different container of my application communicate with each other

Kubernetes, Dockerswarm & Mesos are some of the solutions to these problems listed above which are in other words container management platform!

While Docker swarm is docker’s own container management solution whilst Kubernetes originally started at Google & is now open source.

Kubernetes & Docker Swarm

According to Kubernetes website: “Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.”

In other words, when an application containing several micro services is deployed across different containers on different machines. There is definitely a need to manage the containers which is possible through Kubernetes.

while on the other hand

Docker Swarm is Docker’s own solution for management of docker containers. It monitors the different containers spread across different servers. It provides a useful orchestration system which is well suited for the Dockerized apps.

screen shot 2019-01-29 at 22.03.23

Keep in mind docker swarm does not have much experience when it is production deployments at scale in comparison with Kubernetes. In the coming blogs, we will be covering about Docker Swarm and Kubernetes in detail. So stay tuned 🙂