Importance of Containers in Modern Application Development

In April 2016, PayPal launched its first container in QA and production. After only a few months, they started realizing the advantages of containers which was being able to modernize their architecture without updating the entire application. With over 210 million active users, PayPal also noticed a 10% to 20% increase in efficiency for some of its applications with no change in code. To achieve new operational efficiencies and increase application availability, PayPal has now over 700 applications migrated to Docker containers.

MetLife, a 145-year old insurance company, has over 100 million customers across 50 countries. It has over 400 systems of records with applications that are over 30 years old. Being an old company, MetLife has great historical significance and why not, when they have code written in 1982 still in production! But while serving their customers, they found out these legacy applications are hard to maintain, difficult to integrate, and a hassle to provide support for. So, they implemented a new approach using containers to completely overhaul their aging applications.

MetLife achieved almost 70 percent consolidation on its VM
infrastructure using Docker containers and allowed for scalability of
these applications. What’s more, they implemented the Docker
environment in just 5 months!

Why are we telling these stories? It is to drive home the point that traditional IT set-ups are no longer the right fit for delivering applications today. As we study the examples above, more and more businesses are migrating applications away from legacy architecture in search of better performance and more efficiency.

Of these, containerization as technology has grown in popularity among app developers as well as C-level executives. It has made a significant impact on modern IT by improving the existing process in the way applications are built, developed, and deployed. 

So, what are containers?

In simple terms, a container can support an entire runtime environment – an application, its dependencies, libraries and other binaries bundled into one package – to enable its proper functioning in all environments, whether on desktop, traditional IT, or the cloud. It also makes for a smooth transition from one environment to another — development to testing, testing to staging, physical server to cloud, etc. This container runs on top of the host operating system – that of the server. As each container has its own userspace, multiple containers can run on a single host machine. It does not require an operating system of its own. This is what makes containers lightweight, scalable and highly versatile. And this is where it differs from virtualization – an age-old approach to maximize hardware resources by putting apps into virtual machines (VMs). 

Virtual machine does the same job as a container but it packages the operating system and code together. The operating system on each virtual machine shares the host operating system with other such virtual machines. So multiple virtual machines – the guest machines – run on its own emulated server called hypervisor, which in turn runs on the host machine. This makes the guest machines heavy in terms of resource usage and slows things down. 

All said containerization is not a substitute for virtualization, rather it is complementary to it. While virtualization eliminates the need for an entire server for one application, containerization eliminated the need for an entire OS for one application. Both exist to serve different purposes.

How containers contribute to modern application development

Containers seem to have a promising future. In the effort to make applications lightweight, run anywhere and use fewer resources in its development, containers have aced the role. Let’s dig a bit deeper to find out how this technology can impact modern applications and its development:

Enhancing the impact of microservices

Modern-day enterprises have software applications offering hundreds of functionalities. Often these applications run on a monolithic architecture. When multiple new functionalities are added to such a monolithic application, the task of scaling and upgrading them becomes a nightmare. This led to developers looking for an architecture that offers flexibility to application modernization. They took to microservices-based architecture to make the transition to modern delivery. In this architecture, functionalities are designed as loosely coupled independent services to create one application. This facilitates making changes at the component level without disturbing other parts of the application. Many developers felt that containers naturally fit into microservices architecture. As containers offer an isolated environment, it can be used to deploy microservices independently. By putting each microservices into separate containers, the risk of any friction or conflict between languages, libraries, or frameworks can be avoided.

Microservices can be built without using containers as well, but containerization prevents IT lock-ins with underlying platform and infrastructure, boosting enterprise agility and innovativeness.

Netflix’s is perhaps one of the most interesting and successful stories of
moving from a monolithic to a microservices-based application. The
realization hit them hard the day a missing semicolon led to major
database corruption and brought down the entire platform for several
hours in 2008. With their decision to shift to microservices, Netflix was
able to take quantum leaps forward in scalability and, in early 2016, theyannounced their expansion of services to over 130 new countries

Eliminating Continuous Integration Errors

One critical aspect of app development is testing, bug detection, and elimination. One way of doing this is continuous integration (CI) which can automatically test your code. Traditional CI/CD technologies developed applications by drawing source code repositories. Although it is effective in some apps, different binary dependencies may create a change in the way code runs in development/test/bug detection state compared to production. This problem can be taken care of by containers. By providing an independent environment to run an application, it makes the code run exactly the same in production as well as dev/test/QA state. Some CI/CD tools can even effectively facilitate the testing of multi-container apps pulling from several code repositories. These were the two major setbacks of traditional CI/CD technologies and containers delivered results with great aplomb.

Integrating Dev and Ops

Containers are the first step towards bridging this gap and moving to an accelerated app ecosystem. Containerization allows both Development and Operations groups to fulfill their own teams’ demands as well as design to each other’s requirements. With containers, the learning curve is minimal. Both developers and operations people can focus on their key areas but learn the bare minimum of integration dependencies. So Devs can learn more about the final app but doesn’t need to know how to make it run at scale. Similarly, Ops can learn about the core infrastructure but need not know the nitty-gritty of the app. They will only be accountable for the host that will run the containers and ensuring security.

So containers help in boosting collaboration between both groups, and hence improve development consistency and agility of software development cycle.

There are various container tools and services in the market catering to various developer and application needs. To achieve maximum success, For optimal development and subsequent performance, developers should comprehensively evaluate their application requirements and capabilities to determine the most effective container tools and solutions. Since the market has different container options, tools, and services optimized for various developer and application needs, a developer should go for full-stack that delivers focused capabilities.

Use it effectively

Some may argue that containers are not very high on security aspects. It is because there are very thin layers separating each container environment. Also, a dedicated kernel is more robust than a shared kernel. To tackle these security challenges, some container management systems have created encryption and security services, like Docker Secrets. This helps to manage the way modular applications access data. There is no doubt that a lot more variety of container solutions will emerge in the future. Find out if your application is a good fit for containerization and then adopt an app delivery platform solely designed to overcome modern-day delivery hurdles of an enterprise.