Servers vs Virtual Machines vs Containers

I am a relatively old guy and when I started out around 1995 all you really had were servers, these bare metal machines that were heavy, complicated and had big fans and had to be kept in a climate control room at an offsite location that had good bandwidth access to the Internet at a place called a co-location site. You would store them in racks at the co-location site / server farm and you took good care of them – they were definitely Pets in the Pets vs. Cattle world. You owned the hardware, you maintained it, you maintained the all the software, you even ran the wires to your various machines.

Then in the early 2000’s along came this idea that you did not have to own the physical equipment your could get a virtual machine that may be the entire machine or perhaps just a fraction of it. But you had your specs that you needed and you got what you wanted. You still have to configure the machine and apply patches in some cases but you never physically went to a server farm. This was a big leap forward because now instead of amortizing the cost of the physical equipment on top of the monthly server co-location fees, you could just rent what you needed and not worry about all that. NOTE: Virtual Machines were around before then, but the real shift was when you could create an account online with say Digital Ocean and provision a virtual machine in one of their data centers and manage it all remotely.

Fast forward to 2013 and Docker comes out with Containers and now you don’t have to worry about the underlying architecture, you can build a container and run it on your desktop or run it at your hosting provider, your choice. This was yet another layer of abstraction where the machine setup and configuration was something you did not need to worry about. NOTE: Docker did not invent Containers, but they bundled it in such a way that it got mass adoption. Containers are the cornerstone of Kubernetes, without Containers there would be no Kubernetes as it is the portability of applications that have all that they need to run but do not include all the extra’s that is not necessary.

If you were to walk around AWS’s data centers you would see racks upon racks of physical bare metal machines that are loud and fans all blasting away and the rooms all have raised floors and huge air conditioning units and backup power just like the old days of co-location facilities. The difference today is that all the care, cost and maintenance is up to Amazon to worry about, when you want to run your application in the cloud you can set that up and run it all from your laptop.