A starting point for an exploration of containers and how they’re used is this simple definition: a container is a packaging format for a unit of software that ships together.
A container is a format that encapsulates a set of software and its dependencies, the minimal set of runtime resources the software needs to do its function. A container is a form of virtualization that is similar to a virtual machine (VM) in some ways and different in others. VMs encapsulate functionality in the form of the application platform and its dependencies. The key difference between VMs and containers is that each VM has its own full-sized OS, while containers typically have a more minimal OS.