Almost all software depends on other software components to
function, but these components have independent evolutionary paths.
Small environments that contain only the software that is needed for
a given task are easier to replicate and maintain.
Critical systems that cannot be upgraded, due to cost, difficulty,
etc. need to be reproduced on newer systems in a maintainable and
self-documented way.
Virtualization allows multiple environments to run on a single
computer.
Containerization improves upon the virtualization of whole computers
by allowing efficient management of the host computer’s memory and
storage resources.
Containers are built from ‘recipes’ that define the required set of
software components and the instructions necessary to build/install them
within a container image.
Docker is just one software platform that can create containers and
the resources they use.