Containerization is the process of distributing and deploying applications in a portable and predictable way. It accomplishes this by packaging components and their dependencies into standardized, isolated, lightweight process environments called containers. This is surely not a new concept, in Linux this scenario has been explained by folks for many years now, but
I guess with the complete focus of virtualization, there was none for lxc till Docker came and viewed this as an opportunity and have succeed in convincing that containers are the way for deploying and distributing applications in a predictable way.
Many organizations are now interested in designing applications and services that can be easily deployed to distributed systems, allowing the system to scale easily and survive machine and application failures. Docker, has developed to simplify and standardize deployment in various environments, was largely instrumental in spurring the adoption of this
style of service design and management. A large amount of software has been created to build on this ecosystem of distributed container management and everyday we see big leaders have announced their support for the Docker containers and for few analysts this is a technology to watch in 2015.
What does Docker do ?
In the above example we can clearly see how containers relate to the Host System. Each Application is isolated by container and use the hosts Operating System resources which are abstracted. On the right side I have put the view of how the containers can be created, with multiple layers sharing underlying layers.Some of these concepts help a developer to use a single base container from where he can start building containers for development, build and test since all require different set of tools but can use the common layers like, layer for Operating System etc.
Docker’s main advantages are:
- Lightweight resource utilization: containers isolate at the process level and use the host’s kernel than virtualizing operating system.
- Portability: dependencies for a containerized application are bundled inside of the container, which allows it to run on any Docker host.
- Predictability: The host does not care about what is running inside of the container and the container does not care about which host it is running on.
The interfaces are standardized and the interactions are predictable.Typically, when designing an application or service to use Docker, it works best to break out functionality into individual containers, aka service-oriented architecture ( SOA ). This gives you the ability to easily scale or update components independently in the future. Having this flexibility is one of the many reasons that people are interested in Docker for development and deployment.
I feel personally that we have looked at infrastructure and then programming language support and this is a next step when a developers daily routine activities are being simplified.