Containers and Docker
We’ve already discussed the advantages of having microservices that don’t depend on the environment where they run; microservices can be moved from busy nodes to idle nodes without constraints, thus achieving a better load balance and, consequently, better usage of the available hardware.
However, if we need to mix legacy software with newer modules or if we would like to use the best stack for each module, with the ability to mix several development stack implementations, we are faced with the problem that each different stack has different hardware/software prerequisites. In these cases, the independence of each microservice from the hosting environment can be restored by deploying each microservice, together with all its dependencies, on a private virtual machine.
However, starting a virtual machine with its private copy of the operating system takes a lot of time, and microservices must be started and stopped quickly to reduce load-balancing...