The whole infrastructure is managed through Rancher. It provides a simple interface to all the underlying tools - Docker, HAProxy (automatically configures load balancer from the containers).
The various components of the internal applications are deployed in containers, kept in isolation so that we can easily update some components without interfering with others. This is low cost and fast compared to virtual machines.