A file, say a power point presentation that you’ve created works flawlessly on your computer. The minute you open it elsewhere, glitches appear and your presentation starts looking strange or not function at all. Your nicely designed slide looks unintelligible, simply because the target computer doesn’t have the right font.
In another scenario, the testing environment for an app that’s being developed may use Python 2.7, while Production uses Python 3 and the application may not exactly function the way it was originally planned.
The above 2 examples denote scenarios which prevent software from running reliably when moved from one computing environment to another when the supporting software environment is not identical. These can in turn cause big problems, requiring expensive delays and fixes.
Is there a way to abstract away the differences in OS distributions and underlying infrastructure? The answer lies in using Containers.
Containers allow a developer to package up an application with all of the parts it needs, such as libraries and other dependencies, and ship it all out as one package from one computing environment to another. Containers isolate software from its surroundings, for example differences between development and staging environments and help reduce conflicts between teams running different software on the same infrastructure.
Containers are also particularly suited for deploying micro services – large-scale applications that are built from a number of components, which are each separable and distinct applications in themselves. Containers present a consistent software environment right from development to testing to final production & deployment, and you can run containers on physical or virtual machines.
Data Containers Vs Virtualization
Data containers are a separate technology from virtualization, though they are based on some of the same theories. Let’s look at some differences between Containers and Virtualization.
|Contains entire runtime environment of an application, plus all its dependencies, libraries and other binaries, and configuration files||Includes an entire operating system as well as the application|
|A container may be only tens of megabytes in size||Virtual machine with its own entire operating system may be several gigabytes in size.|
|Containerized applications can be started almost instantly.||Virtual machines may take several minutes to boot & run the applications they host|
|Less secure than virtualized systems||Highly secure|
|Containers are an abstraction at the app layer that packages code and dependencies together.||Virtual machines (VMs) are an abstraction of physical hardware turning one server into many servers|
A notable example of the large-scale adoption of containers in a cloud service is provided by Spotify, a Swedish commercial music, podcast and video service. It recognized the advantages of this technology in late 2013, when it deployed the open-source container-management platform. Docker. Google is another large-scale user of containers, reportedly launching around 2 billion every week.
Containers continue to gain momentum as organizations look for greater efficiencies and lower costs to run distributed applications in their increasingly virtualized datacenters. They are also becoming more common in enterprises, though they still have a way to go before being fully embraced in high performance computing circles