Software containers and what they can do
It’s easy to ignore the latest industry buzzwords, but the concept of ‘containerisation’ is very much worthy of your time. Over the last few years, container technology has gained serious traction as a highly efficient means of running applications in the cloud. With container platforms like Docker now seeing widespread use, it’s the perfect time to get up to speed and find out how containerisation could benefit your projects.
What are containers?
When you hear the word, you might think of those big, cuboid-shaped shipping containers. As it turns out, that’s a useful metaphor. Like shipping containers, software containers provide a standardised, fully enclosed unit that can be easily shifted from place to place.
A container is a package of software that includes everything needed for a specific application, running as an isolated instance and functioning like a separate server environment. Sharing a single operating system kernel, multiple containers can run on one physical or virtual machine, but will not affect each other in any way. To the user, a container feels like its own unique environment, irrespective of the host infrastructure.
So containers are standalone, consisting of just the essentials required to run your code. But because they don’t need to cram in their own OS, they’re also lightweight and agile, allowing them to be quickly deployed and easily transferred across different environments. Containers can perform tasks that would otherwise require a whole VM or server, but by sharing just one OS kernel, they potentially consume far less resources.
Container vs VM
With all this talk of isolated instances and separate environments, you’d be forgiven for thinking of containers as simply mini-VMs. But that doesn’t tell the whole story. Both software containers and virtual machines abstract server resources to act like independent systems, but the way they do this is fundamentally different. While VMs rely on a hypervisor to virtualise a whole physical server complete with OS, containers use OS partitioning and services like Docker to abstract only the software required for a specific application.
Like VMs, containers are highly flexible and scalable, but unlike them, containers are ‘ephemeral’, meaning they don’t need to stick around for long. The lightweight nature of containers lets them be deployed, shut down and restarted at a moment’s notice – another way containerisation offers efficiency gains compared to full-blown VMs for each application.
These differences don’t mean that containers and VMs can’t get along – far from it. In fact, they can be ideal partners on a web hosting platform. Deploying multiple containers on a single VM makes perfect sense, since they can all share the same OS kernel to run completely separate processes. And containers can be placed on any VM or transferred across physical hardware, with their self-contained structure ensuring they behave reliably and consistently, wherever they end up.
‘Well, it works ok for me…’
It’s possibly the most frustrating thing you can hear when experiencing technical difficulties. Just because an application works properly on one machine or server environment, the sheer number of variables from system to system can make it very hard to predict how your code will run elsewhere. Containers offer a way to guarantee an identical environment for your application wherever it needs to run – in other words, it always works for everyone.
In a traditional hosting setup, you would write your code locally, then upload it onto a server – but subtle differences in the new environment could easily render it broken. For example, if you’re coding in PHP, how do you know whether the server infrastructure will always have the right modules available? With containers, this isn’t a concern, since all the settings and libraries your code needs are wrapped up in a neat little package.
In a DevOps setting, this gives containerisation some obvious advantages. Projects can be handed from team to team with confidence that software will work the same way on a wide range of environments. Developers can collaborate freely, safe in the knowledge that their code will always be properly deployed, with multiple containers used to completely isolate elements of a project, such as dev, QA and live versions. And if you need to roll-back to a previous version, it’s simply a case of deploying the existing container image and running your old code exactly as before.
If you decide to start deploying your apps in containers, you’ll need the right hosting technology. CloudNX offers the ideal platform for containerised services, with scalable servers and flexible resources configured on a pay-as-you-use basis. Use the latest open-source containerisation tools on our high-performance virtual machines to package your code in easily deployable chunks – and get all the benefits of containerisation.