Fundamental shifts are often dramatic and hard to miss, but sometimes profound change can tiptoe in as smaller factors and go almost unnoticed. The world of Software Development is going through just such a transformation.
- Hardware is now a commodity. Remember when it used to matter what sort of hardware you bought? Not anymore; chances are most of the business applications you use are running inside a VM, or in the cloud. Virtual machines have abstracted away so much of the environment that the underlying hardware is now irrelevant.
- Operating Systems are a commodity. Gone are the days when a hardware manufacturer would spend years writing their own Operating System to get the best out of their platform. Now it’s Windows, Linux, MacOS or a few niche options.
- The User Interface is a commodity. Yes, there are some differences, but you can run a perfectly good Graphical Desktop on Linux and a more than acceptable shell on Windows. Which one you choose comes down to a matter of personal preference.
- Networking is a commodity. No more struggling with thick and thin Ethernet. No more making sure the cables are wired correctly and the ports are running at the correct speed. Now all platforms provide essentially the same features and functionality and they “just work” (unless you’re struggling to get a Wi-Fi adapter to stay connected in an area with low signal strength … but that’s a different story!).
- The application environment is now a commodity. It is? Yes, it really is, it’s just that you may not have noticed yet! Containers are sounding the death knell for the traditional application environment. No more careful installation with just the right set of libraries; “side-by-side libraries” and “dll hell” can be consigned to the dustbin of history! Containers have transformed the computing environment; they are the new Operating System providing everything an application needs to work in a portable way. Sounds great, but what are they?
Containers – really, they are just “software in a box”. They do the same thing as a lunch box or a shipping container, offering a convenient way to package an application so that it is self-contained, easy to move around and simple to deploy. Similar to the way that VDI-in-a-Box packages a desktop.
Types of Containers
There are three variations on Containers:
- Virtual Machines (e.g. ESX, Hyper-V, KVM). These have been around for years. They offer a way of making a standard image that can be run on different hosts, but they’re resource hungry and time consuming to set up.
- System Containers (e.g. Virtuozzo, OpenVZ). Just like VMs, each container is a full system image, but the underlying kernel is shared with the host. They are a light weight way of creating a virtual machine with the same image as the host system.
- Application Containers (e.g. Docker). This is where the world really starts changing. Every container is defined by a text file which sets up the environment needed by the application. Then it can be run anywhere without worrying about the underlying platform. The user gets a self-contained copy of the application that is reset to the original ‘perfect’ state every time they run it. They are very light weight and have equivalent performance to running the application locally.
There is more to Containers than just convenience. Because each application is wrapped up in its own private environment, multiple copies can be run on the same platform. This enables Microservices, which are a way of splitting an application up into small stateless components that can be scaled as required. Just as shipping containers revolutionized the world of freight, so containerised microservices are transforming application development.
This transition won’t happen all at once; in fact, there is a trend for existing applications to be moved unchanged into a container and for new development to occur alongside using a microservice based architecture, providing a rapid path to realizing the benefits of containers.
Keeping all of this running requires a new type of scheduler, called an Orchestrator, of which Kubernetes is the one of the best-known examples.
Think of it as the helmsman of a ship setting the course and responding to events (which funnily enough, is exactly what the Greek word means!).
Container adoption is rising sharply and is here to stay; they are simply too flexible and portable for the industry to walk away from.
DataCore is the Authority on Software-Defined Storage, so why am I writing about containers? The world of Software Development has fundamentally changed; we are in a new era. Nearly everything about our infrastructure has become commoditised, with the exception of persistent data, where we are still relying on the services in the host Operating System, or features provided by individual hardware vendors. Surely a new era deserves a new kind of storage stack?
Watch out for more from me on this topic, but in the meantime why not check out Docker containers, or if you are already using them, try out DataCore’s Software-Defined Storage for Containers on github.