Whenever you are learning some new technology, I believe that you should start from very basics.
Try to grab the overall idea and make it a home in your brain from its foundations. Often you find the fancy how-tos and technical stuff readily available. Whereas, it is hard to find the core definitions of technologies in easy to understand words. I have tried to pen down the basic concepts of the titled topics in simple words.
If you are familiar with pay-as-you-go services (cloud services), it is easy to understand Docker. Docker is packed with PaaS (Platform as a Service) solutions which provides you an independent layer (enhancing the compatibility) to run small parts of your application as containers. These containers then harmonize their functionality to deliver the end product. Docker is an open source technology.
For personal use, it has a no cost Community Edition (CE) to create containers and test your applications. It detaches the developer from the stress of hardware and OS configurations for application deployment.
What is a ’Containerized Application’?
In simple words, a ’container’ literally means a holder. So, a containerized application is the one which is packed inside a container. Container is holding the application and now we can take our container along with us anywhere (portability).
Application doesn't need to know what is happening outside of the container (isolation). Application has its own world with all its dependencies inside that container.
Here when I am referring an application, bear in mind that the application is a part of a whole. It is one slice of a cheesecake not the whole cheesecake. This application running inside a container can be a small service, libraries, a tool or any dependency which is needed by end solution. It will run in parallel to other services (other application containers) to give you complete functionality for your application or software. These are also termed as microservices.
(I will not go in depth about Microservices architecture in this article but as this is integral to containers, you should know about it. You can read about it in this wholesome article.)
Why do we need ‘Containerized Applications’?
Nowadays, most applications are developed using Agile methodologies, incorporating the CI/CD (Continuous Integration and Continuous Development). Which means development is done rapidly with small release cycles.
You are continuously adding the functionality to your product according to the requirements of your customers. For doing so, your application architecture should not be tightly coupled that a single change takes huge amount of time and money. And it should also has the capability to scale itself. With containerized applications we achieve this flexibility and scalability.
The light weight components (containers) of your application can be replicated as many times as you want. And it is also painless to fix something in a single service independently without disturbing other components.
What is the difference between VM (Virtual Machine) and a container?
Both the VM and container are virtualization techniques. However, a key difference between a VM and a container are those items to which they are providing virtualization. A VM runs on top of your computer which is virtualized, so that you can run multiple OS. Whereas, container virtualize the OS, so that you can run multiple application containers over single OS.
This also indicates that the containers need less resources (multiple running in single OS) and give greater performance. However, VMs have their importance and are tailored to the needs of those applications who do require to have complete OS and need to run in a tightly coupled fashion.
How do you Run the Containers?
You can run the containers by following these basic steps on your personal computer:
You can find complete installation guide and required commands to run these steps here. If you would like to know, how things are working behind the scenes, you should read Docker Overview.
How do you Manage these Containers?
It is true that managing single application or software is easy than managing so many chunks of your software at the same time. There are many ends to look for in a production environment for example, their load balancing, scheduling, resource management, resiliency, their coordination etc. But for management and automation of your containers, we have orchestration services.
Orchestration is to plan and manage the components of something in a systematic way which gives a desired output.
Here comes another open source giant, Kubernetes. Kubernetes is an orchestration service. Kubernetes is a topic which requires exclusive time and writing space. (It will not be discussed in this article but you can have a grasp over it by reading this documentation.)
There is a lot of depth to these technologies but the scope of this article was to get you started from the root. I hope you have learned something useful in short time.
Do share your comments or questions so we can learn more together. Happy learning!