What does containerisation mean?
Multiple containers can run a single host without a need for a new VM. They access the same OS kernel. Containers work on bare-metal systems.
How application containerisation works?
As mentioned above, application containers bundle runtime components necessary to run the desired software.
Application containers consume less resources compared to applications deployed on virtual machines because containers share resources without a full operating system. The container engine deploys these bundles on host.
The most common app containerisation technology is Docker, specifically the open source Docker Engine and containers based on universal runtime.
Docker Swarm is a clustering tool. IT administrators and developers manage docker nodes as a single virtual system using it.
Application containerisation works with microservices and distributed applications. Each container operates independently and uses minimal resources from the host. Scaling up is easy to meet business growth. Containers encourage flexibility. Developers can quickly make desired variations from the standard image and update the image to run on host.
Why does the Application container perform better than virtualisation and system containers?
Virtual server abstracts the operating system and application from the underlying hardware or resources. A layer resides between server hardware and application and services. Application runs on its own version of an OS and dependency. For each different OS, it needs a separate virtual server and it also consumes more resources and requires more licenses as well. Refer below image.
Containers are an abstraction at the app layer that packages code and dependencies together. Multiple containers can run on the same machine and share the OS kernel with other containers, each running as isolated processes in user space. Containers take up less space than VMs, can handle more applications and require fewer VMs and Operating systems. Refer below image.
Advantages of Containerisation
Maximize Development Productivity
- Get up and running in minutes using Docker images to set up a containerized development environment.
- More focus on development rather than setting up environments.
- Standardise environments so you can run from the same starting point every time.
- Portability across your on-premises or cloud environments without limiting your choice of tools, frameworks, and languages.
Automate workflows
- Integrates with source code repository to automatically build images from source code and automatically push them to your Docker Hub repo.
- Easily run tests on each change in source code.
- Integrate event based actions and automate build and deployment process.
Effective Productivity & Collaboration
- Cloud-managed container registry service via Docker hub or AWS container registry service. They securely store images in a container registry.
- Configure role-based access to securely share container images using Organizations and Teams.
- Enables automated and centralised communication directly for image builds and updates.
Containerisation pitfalls
Containerisation is great but they do not pass all hurdles. If you really want to understand how containers work, you have to understand its limitations as well.
Containers are popular over the past few years. It doesn’t mean it fits for all your workloads. It does have certain limitations.
- It certainly runs fast but it can never be faster than running applications natively as it still has a layer to interact with Kernel.
- Applications designed to run on Linux cannot be run on windows just because windows support containers. Cross platform is still a problem.
- Containers are designed to run on backend or non-graphical environments. There are certain ways to let you run a graphical environment. But it’s not designed to run rich graphical applications.
- Containers open new security challenges as well. E.g. they are difficult debug where so many applications are communicating with each other.