What is Docker?
Docker is an Open-source container technology that lets developers build, run and ship applications inside containers abstracting the virtual machines and Hypervisors and all of the overhead that is associated with it. The thing is, containers have been popularized by Docker Inc. So Docker and Containers seem to go hand in hand. But there is also another player in the market. Core OS have their own command line tool for containers that is called RKT (pronounced rocket). So the next question is what are containers?
What is a container?
Containers are a lightweight and efficient mechanism of abstracting away the hypervisor layer and the virtual machine layer. Also, they are way in which the run time environment is maintained the same for development, testing and production. Typically when development/testing is done on one environment and everything turns out to be smooth, but when the environment changes at the time of production the application may fail. A small example maybe when you run tests on Ubuntu and production is done on Debian or Red Hat. Containers take away this problem.
Containers allow us to build applications on a unified platform where the entire runtime environment stays the same while the only variables being the application, its dependencies and the machine readable binaries/libraries.
How is it different from Virtualization like VMWare and Hyper-V? It is that the Hypervisor technology has a Hypervisor layer on top of the physical resources. On top of the hypervisors Virtual machines are spun up. These virtual machines each require an OS and all of them share the hardware resources.
For example, a physical machine running four virtual machines with four separate applications as shown in the diagram, would require four separate OS while sharing the physical resources.
Whereas containers (Docker containers for example) contain applications and respective libraries and binaries on top of the Docker engine. The Docker engine is a daemon that runs on just one Operating System and the OS runs on the hardware. Now, on top of this Docker engine, several containers can be created in which applications are installed and run. This means that the containers all share the same Operating System kernel and use fewer resources getting rid of all of the fat.
The container hierarchy looks something close to the image. Getting rid of all of that means more space to run applications for the business. Moreover, these apps running in containers start up really fast because unlike with the virtual machines and hypervisors there is only one individual Operating System which is already up and running. Therefore, more apps can run on the same server if containers are run instead of having the hypervisor and virtual machines. Squeezing more out of the same physical server.
So containers in many ways are the next version of virtualization. They are growing at a fast pace and definitely the future for building/running/shipping applications and enterprises are adopting the container technology but it is by no means a substitute for virtualization technology. At least not yet.
You might also wonder that organizations would not adopt to this technology, but statistics from Datadoghq say otherwise. From May 2015 to May 2016, they say that Real docker adoption has gone up by 30% and some more interesting figures all suggesting that docker is indeed the hot topic in the market at the moment. In case you were wondering, here’s a list of customers who have adopted docker already
So in a nutshell, traditionally enterprises were given the boon of virtualization which freed them from the nuance of running workloads in physical servers, not to mention a ton of other overheads. Hypervisor virtualization made enterprises run applications better while chopping down things like Operational and Capital expenses. But containers are even better because, the hypervisors run virtual machines and each virtual machine to run an application need licensing, patching maintaining while consuming resources, whereas containers are lightweight and scalable while sharing the same common OS and it’s kernel.