For a long time, web applications have been deployed directly on bare metal servers. To run a web application, you had to rent a server, install an operating system, then run your application on top of it.

Screenshot from 2015-05-22 17:18:55 This was time consuming, dependency management was complicated and it was almost impossible to distribute the resources efficiently if you had more than one application. Screenshot from 2015-05-22 17:19:30 Virtual machines improved this situation by allowing developers to run different operating systems on top of the same hardware and to distribute the resources in a better way. A physical server can host many isolated virtual machines running on their own operating systems and allocate them different resources. Screenshot from 2015-05-22 17:22:27  Screenshot from 2015-05-22 17:24:39 Virtual machines abstract the hardware – but they still require you to install one operating system per application. More recently, another technology has emerged: Linux containers. They allow the developers to run many isolated applications inside the same operating system.

Screenshot from 2015-05-23 10:45:54 Linux containers abstract the operating system. Two years ago, they were made much easier  to use by Docker:

Click here to try docker directly in your browser.

Since then, other projects have been developed to allow developers to run containers seamlessly on top of a cluster of machines.

CoreOS Three-Tier-Webapp Panamax
And finally, another nice project that I discovered recently,
[vimeo 117153420 w=500 h=281] from Team on Vimeo.

Other useful links

Sources of the images

[Nicolas is a Senior Full-Stack Developer at SuperAwesome]