This blog will be the first in a series where I want to take you on a journey through the great landscape of containerization. Because this is a fairly new topic for myself I will start with the basic understanding that I have now.
Because my daily work exists out of developing mainly Microsoft solutions I will use Windows and Microsoft Azure as a base throughout the upcoming container blogs.
Microsoft started to fully support Docker in Windows Server 2016 and in Windows 10 with the Anniversary update. Now with Windows Server 2019 in vision containerization in Windows is starting to get more mature. For me this is a good starting point to start my journey.
Start of the Journey
Last week I went to the first edition of the Containers Today Event in The Hague together with my colleague Bas de Bolster. This event was organized by Docker and several sponsors like GitHub. Keynote was done by Bradley Wong who is the Director of Project Management.
My purpose of visiting this event was trying to understand what containers are and how to use them in general. Although the event was very informative I did miss some more deep dives to get some more insight in the DNA of containers, but at least I gained some knowledge about containers in general. This encouraged me enough to search for more information on a daily base to increase my knowledge on this topic.
Why use containers
Before explaining what containers are it’s good to know why containers are becoming a hot topic these days. Actually the technology exists for a very long time, but really came on the radar about 5 years ago through the open-source project docker.
In the old days, when we were still watching Melrose place and MTV most wanted, PC’s were mainly used to run one or more applications. This was fine although an average of 30% of the CPU and memory capacity was used. In large companies there they had hundred’s of servers running all different kind of applications which was a waist of the available power they had available if you could combine all those cores and memory
Many years later virtualization came to market which gave us the possibility to run multiple guest servers on the same hardware. This was a great development because we needed less physical servers, and could easily increase our density on these servers.
Still the disadvantage of virtualized servers is that you still had to allocate CPU and memory to each virtual machine. The good news was that you were able to optimize the usage of your physically available hardware, but still had to run multiple Operating Systems and are wasting valuable hardware because once the resources are allocated, they can’t be used for other VMs
This got better over the years because the hypervisors got smarter and can dynamically scale the hardware allocation to a certain level.
Since 2013, only 5 years ago, Docker came to the market and made containers more accessible to the public. The great advantage of containers is that you can increase the density of your virtual machine’s that are hosting the containers. When starting a container it doesn’t need to start an operating system, but uses the kernel of the VM.
Because of this they need a lot less memory than VM’s and are only running to execute a task and are than closed again. This means that the available hardware resources can be used in a more optimized way as the container only uses this when needed.
Another benefit of containers is that they are self containing and therefor are portable, like portable apps, and can be shifted around the virtual machines that you have available. Dependencies, like drivers, libraries, API’s etc. are all in the same container.
So briefly, why should you look into containers?
- increases server density
- because they are portable
- are easily distributed over available servers
- use less memory and cpu
In the next post I will try to explain more about the DNA of containers and they way they can be maintained.
After that I will start to try and build an IIS server in a container and ultimately are going to try and build a VSTS build server in a docker container.
If you miss any information, or read anything in my blog that is incorrect, please let me know!