The shortest description I can come with is, Containers are deduplication for Virtual Machines. In other words, Containers is the term used to describe sharing of common files and memory space typically applied to Virtual Machines.
The notion is that classic VM’s operate completely independent of each other, in complete isolation, even on the same physical host machine. That means that each VM has to have it’s own file space and memory space for the Operating System. If the physical host machine could somehow share that file storage and the memory space used by those common files, you could have:
- Virtual Machines boot up VERY quickly
- Substantially reduce disk space requirements on the physical host, especially when you are working with webservers or application servers
- Substantially reduce memory requirements on the physical host
Above are two graphics I appropriated from the most excellent Mark Russinovich and his excellent article on Containers.
…Here, containers simply share the host operating system, including the kernel and libraries, so they don’t need to boot an OS, load libraries or pay a private memory cost for those files. The only incremental space they take is any memory and disk space necessary for the application to run in the container. While the application’s environment feels like a dedicated OS, the application deploys just like it would onto a dedicated host. The containerized application starts in seconds and many more instances of the application can fit onto the machine than in the VM case.