A Business Insider article from November 2014 described Docker as ‘the most important startup you have never heard of’ but if your social media feed resembles anything like mine you have undoubtedly seen it mentioned in more and more posts. A quick look at the Google Trend chart below shows that the number of searches for ‘Docker’ has steadily risen since its initial release in early 2013.
But what exactly is Docker? Before we dig into that lets take a step back and look at its underlying technology, OS-level virtualization which is commonly referred to as containers. Containers, which have been around in one form or another since 1998, allow multiple instances of a single operating system on the same server by sharing kernel resources among the instances. One of the most common Linux Containers, LXC (spoiler alert: Docker utilizes LXC) sums it up nicely when they state their goal is to ‘create an environment as close as possible to a standard Linux installation but without the need for a separate kernel.’ Containers are complimentary to Virtual Machines (VM) but due to their utilization of a shared kernel and by including only the resources required for an application, they offer several benefits over VMs. One of these major benefits is their ability to produce near bare-metal speeds. At dockercon14, Boden Russel presented his findings when comparing performance metrics of Docker to KVM in an OpenStack environment. The below graph shows the results of launching 15 Containers in Docker and 15 VMs in KVM and their subsequent steady states. In this case containers had a ~9.5x performance advantage over VMs.
As the earlier spoiler alert alluded to, Docker utilizes the low-level functionality of LXC while also offering a high-level tool that increases the usefulness of containers. Some of the additional functionality includes:
- Git-like versioning
- A standard format for packing an application and all of its dependencies into a single object which can be easily moved between machines that have the Docker daemon installed
- The ability for a container to be used as a base image for any of your builds
- Access to a public registry that hosts countless pre-built containers
Did I mention Docker is also completely open source?
As someone who is traditionally focused on the hardware side of the house, Docker was initially just another cool technology but its full potential did not become apparent until I took a step back and viewed Docker in the context of the entire IT ecosystem. The amount of variation (think Python 2.7 on Server A while Python 3.0 is on Server B) in an environment can be staggering and developing an application for all possible configurations can be a nightmare. By standardizing the environments in which applications are developed, Docker removes all of those concerns. For a better look at the issues Docker solves I recommend reading The Phoenix Project while keeping Docker in the back of your mind. I guarantee you’ll have a ‘mind blown’ moment.