Does your company need containers?
“- We offer you a solution based on containers – Ehh… What are containers?”
Sounds weird, right? Especially when you are discussing some technical details with a potential customer. To get rid of this shame and help customers in basic understanding, we decided to create this article as a brief overview of what are containers and why do you need them.
Containers are not something new or revolutionary – they have existed for more than a decade, but now, with the huge advancement of cloud computing, containers are experiencing a rebirth.
Containerization is a technology of wrapping a piece of software (set of discrete components of application logic) with all of its dependencies in a filesystem only with minimal resources needed to run this software: code, runtime, system tools, system libraries. The idea is to make sure that this piece of software is fully portable and will run the same, regardless of environment.
Unlike virtual machines, containers have no need for embedded operating systems – they share the kernel with other containers, running as isolated processes within the same host operating system (whereas OS resources calls are made using API), which make them more efficient.
Microservices are closely related to containers and sometimes this term is applied erroneously. Microservices represent the further advancement of containerized technology and leverage its benefits. The idea of microservices is to divide each element of functionality into a separate service, making an infrastructure even more flexible and scalable.
For example, a typical fully-featured application has its own user interface, database and server to handle requests. Having all these components as “system-on-chip” is obvious and makes request handling a bit easier, as well as simplifies horizontal scaling by adding several physical servers with a load balancer.
But taking into account cloud services expansion, such all-in-one systems become useless: even the smallest changes and updates require re-building and re-deploying the system. Such an approach makes a modular structure harder to implement and time consuming. In big applications scaling is complicated because it requires scaling the whole system instead of a particular module.
On the contrary, microservices allow you to build and application as a set of services with individual scaling and deployment capabilities. The isolated modular architecture makes it possible for developers to create new modules independently using different programming languages.
This word is also closely related to containerization and you may already heard something about it. Orchestration is a process of coordinating the interaction between several containers. Basically, you are free to create a separate container that will contain all the necessary processes, but this approach lacks flexibility when scaling, changing architecture and also creates additional troubles with security because there are many processes that can affect one another and this operation is nohow isolated.
Orchestration provides you with powerful tools to manage containerized environments and allows you to build your infrastructure based on a set of separated (isolated) containers where each container performs only one function and the communication between containers is established via network ports and shared directories. Another benefit here is that you can replace some container with another, for example, to test your application with a different version of database or software component.
Containers share the kernel with other containers, use less RAM, start in seconds, share common files making disk usage much more efficient.
- Open-source and cross-platform
Containers can be launched both on Linux and Windows thanks to open coding standards.
- Security and conflict-free
Applications in containers are isolated from each other which makes them more secure and eliminates possible internal conflicts as well as those caused by the wrong development tools.
Applications in containers have all dependencies and configs and are packed only with least resources required to run them. This ensures applications to be fully consistent and manageable in any environment, so you can launch containers from anywhere: computers, local servers, public and private clouds.
- Better scalability
Containers can be launched and stopped in seconds, which makes it easier to allocate or revoke resources (scale up and down) to nicely meet customer demands, making the resource usage more efficient.
- Faster development process
Less time spent on maintaining development environments and choosing the right tools for development means more time spent on fixing issues and delivering new cool functionality. Faster development process means that your company is able to deliver the better final product to the market earlier and make new releases more frequently, providing target audience with added value and higher level of satisfaction. If your company uses continuous integration, containers can drastically reduce the time taken to implement each stage of the development process.
- Less painful rollbacks
In case of unforeseen situation when you environment got broken, you can identify and isolate the faulty container, roll it back to the relevant stage to implement the required changes and then deploy it back to production. These operations are much more simple and less devastating than you’re expecting them to be.
- Better resource usage
According to different reviews and comparison guides, containerized environment brings from 5 to 7 times better usage of server resources. This is a huge benefit for those who have a bunch of expensive servers and want to restructure, optimize and streamline data and applications across these servers or even get rid of some of them as excessive resources that are no longer needed.