A recent survey across 4,976 respondents showed that high-performing IT organizations deliver changes to production 30 times more frequently and 200 times faster. As software munches through industries, fast delivery is a huge competitive advantage. However, it is not just delivering faster; rather its high quality delivery with 60 percent fewer failed deployments and a Mean Time to Recover (MTTR) that’s 168 times faster!
Not surprisingly, a key differentiator for these top performers was their adoption of DevOps practices and comprehensive automation. This article will focus on a technology that is rapidly becoming the cornerstone for successful DevOps initiatives—application containers.
A Brief Introduction to Containers
Containers are not a new way to provide secure segmentation and share an operating system’s resources. Sometimes referred to as OS Virtualization, they act as a single host operating system.. . Traditional platforms, such as Heroku and Cloud Foundry, have always used containers internally. What’s different now is that the industry is moving towards standardizing containers, and that enterprises can freely choose the best tools and services built around these standards. Interestingly, as part of the launch of its cloud services, Google revealed that they have been running most of their applications in containers for the last 10 years.
Containers provide several benefits and lead to DevOps best practices. 1. Immutable Images: With containers, application code is packaged into a binary image, as part of the build process. This image can be versioned, tagged, and pushed to an image repository. They can then be pulled and executed, without any change, on any container host. Immutable images are a key to fast recovery and other DevOps best practices such as blue-green deployments and canary launches.
2. Portability: Once built, a container image can be run on any host, enabling basic portability. Multi-cloud Container services, like Nirmata and Tutum is build on this basic portability and enable fully automated deployment of entire applications on any cloud provider, with a single click or API request.
3. Standard Units of Operations: Since all applications are packaged in a common format, automation tools doesn’t have to deal with the complexity and varying needs of different languages and runtimes. A great analogy here is related to shipping container and transportation industries—imagine the lack of productivity before shipping containers became an international standard!
4. Fast Deployment Times: Containers are lightweight and typically start in milliseconds. Since, release cycle application developers do thousands of launches, decreasing deployment times directly translates to huge productivity gains for the team. One of our customers at Nirmata, a large Enterprise IT applications team, estimated a 30 percent increase in agility by moving to containers for automated deployment of their dev- test environments.
Containers are poised to quickly become the first choice for packaging and deploying applications
5. Increased Utilization: With containers, you can decouple applications from the underlying infrastructure. This makes it possible to share infrastructure across applications and environment types. Taking a step ahead, containers fully automate the placement and scheduling of application containers. These tools can help increase server utilization from the typical 10-15 percent to a 60-80 percent range. For instance, another Nirmata customer has leveraged AWS Spot Instances and saved 60 percent on server costs, by relying on automated recovery and demand-driven scheduling.
6. Enabler for Microservices: High performers have architected, enablinge DevOps to become mainstream, as Microservices. With Microservices style architectures, large monolithic applications are decomposed into smaller runtime components that can be independently versioned and delivered.
As with any new technology, application containers do introduce new challenges that need to be considered.
1. Security: Application containers running on the same server share a host operating system. This may be a concern for some applications. Most deployments today deploy containers on Virtual Machines and use existing tools to secure the virtual machine. This can impact utilization, but helps provide security and isolation where needed.
Another security concern is ensuring that container images, especially those used in production environments, are pulled from a trusted source with approval and verification for use by the security team..
Both of these issues have been addressed by Docker and startups like Illumio, Twistlock, and Apcera to provide comprehensive security and compliance solutions for containers.
2. Orchestration and Lifecycle Management: While deploying a small set of containers is easy, managing containers for different environments and applications can be complex. Container deployment and lifecycle management is best left to automated services which can continuously monitor, tune, and optimize deployments. The good news is that startups like Nirmata and Tutum are providing easy-to-use multi-cloud container services designed for enterprise DevOps teams.
3. Monitoring and Troubleshooting: With the shift towards Microservices style applications using containers, the requirement is to manage new approaches for monitoring and troubleshooting applications. Once again a healthy ecosystem has rapidly emerged, with startups like Sysdig, SignalFx, and DataDog filling in the void.
Application Containers are a key enabler for DevOps agility and automation. While no single technology is a silver bullet, containers can be a game-changer for enterprise DevOps!
There is a common misconception that containers are only good for certain types of applications, such as stateless microservices style applications. This is not the case and almost any application that can run in a Virtual Machine can also run in a container. Also newer storage services, as well as container storage plug-ins are available for the few cases that cannot be handled. Much like the adoption curve for VMs and cloud instances went from “cool, but my application has special needs” to “cloud-first!” containers are poised to quickly become the first choice for packaging and deploying applications.
By adopting containers, enterprises can immediately leverage several best practices that high-performing IT teams have in place. At Nirmata, the advices we give our customers are as follows:
1. Containerize: Containerizing existing applications provides immediate value with agility and portability. The process will also bring best practices, such as separating configuration from code, and other principles for 12-factor applications. For instance, a 3-tier application is best containerized as three separate containers images, one for each tier.
2. Automate: Containers can now fully automate application delivery and lifecycle management. Early adopters had to build their own tools, or cobble together several different tools. Now enterprise-grade solutions are available for mainstream use.
3. Transform: Lead towards a DevOps culture and organization. Also consider transforming monolithic applications into microservices style applications for increased agility and benefits. These transitions take time, and should not be rushed into.