The world of Information Technology is usually buzzing with the latest and greatest trends of the moment. These days, we’re hearing a lot about Artificial Intelligence, augmented reality, blockchain and the Internet of Things (IoT). However, despite the buzz, these new technologies can take time to become mainstream and sometimes will just bubble away beneath the surface before potentially making the transition into a household name. Although admittedly “household name” is a relative term, since the majority of these terms will only be known in the residences of people in the IT industry!
Recently there is one piece of technology that I’m starting to see make that move towards the mainstream, without any real buzz: containers. If containers aren’t yet a regular conversation topic at your dinner table, let me introduce you to this new development in cloud computing.
CONTAINERS IN THE CLOUD
Containers in cloud computing are named after the physical containers used in the shipping industry. Shipping containers were designed to standardize the method of transporting goods on ships. Before their introduction, stacking and transporting items by sea was a complicated and inefficient process. Now businesses can pack their products into a container and know it will fit on any container ship in the world.
The computer version of a container follows the same principles. It’s designed to make applications as portable as possible by packaging everything an app needs to run (all the code, libraries, config, runtimes, etc.) into a standardized unit that can be deployed in any containerized environment.
For example, if you wanted to run your website in a container, the container would store all the PHP, Apache and MySQL code along with all the associated settings and data, and your application could be deployed in any containerized environment and it runs without issues.
When people talk about containers they also often mention something called “Docker”. Docker is the most popular containerization software and has been around for a while now. It was launched in 2013, but recent developments in the cloud space have started to make this service much more accessible and significantly easier to use.
THE UPSIDE OF CONTAINERS
This kind of standardization is a big step forward in the world of application development. Consider the traditional method of moving your code between your development, test and production environments. The usual result is that the application behaves differently in production, resulting in lots of head scratching when trying to work out what is wrong or missing. However, if a container runs to your requirements on your development environment, you can port it to your test, staging and production environments safe in the knowledge that it will also run without issue.
Containers offer other benefits too. Traditionally you would run your website on an instance, either a physical server or a virtual machine, and if you wanted to horizontally scale the website to cope with increased demand, you would launch additional duplicate instances. However, unlike instances, containers do not contain a copy of the operating system, which makes containers very small (MBs rather than GBs) so you can pack dozens of containers onto a single server and make scaling your website a very cost-efficient process.
THE DOWNSIDE OF CONTAINERS
Do containers sound too good to be true? They can be because containers start to get complicated if you want to run multiple containers across multiple machines that all need to talk to each other. You need a way to start all the containers at the same time, how to cluster them, figure out how they are going to communicate and work out what to do if a container or the underlying hardware fails.
For this you need a container orchestration service—such as Kubernetes or Docker Swarm—to allow multiple containers to work together. But these tools are hard to understand and increase operational complexity, which is why containers haven’t become as common as they otherwise might be—yet.
THE BIG THREE OFFER MANAGED VERSIONS
In recent years, the “Big Three” cloud providers have launched their own managed versions of containers and orchestration services that somewhat simplify containerization:
- Google Container Engine is a managed, production-ready environment for deploying containerized applications using the Kubernetes Engine.
- Azure Container Service allows for quick deployment of Kubernetes clusters to Microsoft Azure.
- AWS Elastic Container Service is Amazon’s “Docker as a service” service to simplify building Docker hosts.
- AWS Elastic Kubernetes Service is Amazon’s managed Kubernetes service which enhances the ECS service.
These services make containerization in the cloud a more viable proposition. However, managing Kubernetes can still be complicated for large environments as it requires staff who understand how to provision, schedule, manage and architect all your containers.
Things might be about to change with the release of AWS Fargate which allows you to run containers without managing servers or clusters. This means you no longer have to provision, configure and scale clusters of virtual machines to run your containers. Instead, you can focus on the design and build your application containers. This will make the management of containers a breeze and should propel containerization further into the mainstream.
In the container department, it looks like AWS is gaining the advantage for now with Fargate, but Microsoft and Google are sure to respond with their own improved container management service. When that happens, expect to be hearing a lot more about containers than you do right now, perhaps even at your dinner table!