31 Jan 2020
By Mohammed Abubakar
To appreciate the advantages of Containers, we can compare them to another software deployment revolution which are Virtual Machines (VMs). VMs are a codified virtual computer, with its own virtual hardware, operating system, and networking. Containers include all the OS and application libraries that a microservice needs in order to run.
VMs and Containers share more in common than they differ. While they have different architectural frameworks, the goal of both Container and VM is to isolate an application and its dependencies into a self-contained unit that can run on any server.
While VM’s have their own OS, containers execute application processes in isolation. Just as a seafaring container on a ship can be placed upon different ships without losing any functionality, so can agile containers. The host OS therefore does not need specific software to run an application.
Before containers applications were OS dependent, making it dependant on the hosting infrastructure. With configuration files and dependencies built in the container can run on any compute environment, including desktops, physical servers, virtual servers, testing, staging, production environments and public or private clouds. This portability makes hybrid and moving between cloud platforms more seamless.
Containers do not interact with each other. If one microservice crashes, other containers in the same application will not be impacted. This feature also comes in handy in the case of malware or nefarious hacking. The hack will be isolated to that container and not take down the greater application. Hacked container is automatically replaced by a clean container.
Without the weight of the OS, containers can start up in seconds compared to minutes for most VMs. By taking up much less space, a higher utilisation can be achieved. Developers can cram much more into a smaller area to lower either bare metal, data center or cloud costs.
For enterprise wanting to innovate quickly and practice continual improvements to their applications containers are ideal. Customer experience is enhanced as bugs are fixed or new features are added on the fly without disruption to greater ecosystem. Within seconds containers can be created, replicated or destroyed speeding up the development process and time to market.
With the correct design, containers can handle increased demand by adding identical containers within a cluster to scale out. This feature offers cost savings as just the containers needed in real time will scale, leaving the rest of the infrastructure available for other services.
Since containers run the same on a desktop as they do in the cloud, developers can achieve efficiencies when it comes to application design and testing. Not having to address environmental inconsistencies allows the developer to focus microservice health and spend less time debugging across environments.
With containers, development teams have been reorganised. Instead of owning a functional component of the application, they now own a microservice from end-to-end. The delegation of ownership and accountability contributes to strong application design with in turn enhances uptime. To update an application, developers simply iterate on their application code, create new containers, commit those containers to their container repository, often triggering an automated deploy. Version control allows for rolling out and rolling back in real time. Plus sharing containers using AWS’s Elastic Container Registry (ECR) is simple, automatically giving their project team access to a developers work.
Employing DevOps philosophies, the developer teams behind each of the bounded, yet independent microservices, own their microservice from build, to test, to release.
For example if an ecommerce container needs an upgrade or patch, that can be accomplished without disruption to the other containers within the application. With containers, one development team cannot break the code of the entire app. If code is broken it would be isolated to their own microservice. And with versioning, a container roll back can minimise any pain or user experience disruption.
The size and complexity of a cloud environment impacts the amount of containers needed. Netflix is AWS’s biggest customer, and has over 700 microservices allowing for responsive, secure, architecture.
In the abstract, containers are about deploying exactly the cloud resources you will need to complete a specific compute objective. For applications running in the cloud, microservices running in containers have enabled next level agility, flexibility and security.
Containers bring a number of very useful capabilities that are impossible to ignore. If you would like to find out how you can enhance your existing applications with modern development best practices, with the speed, scalability, and ost-efficiency of the cloud please contact us here.