Images must be stored somewhere. Locally, each Docker host stores its own data under /var/lib/docker/image in Linux and c:\programdata\docker\image in Windows, by default. But these directories will work locally only, and we usually need to use images to build new ones and share them across multiple nodes.
We can use the Docker command line to export and import image layers on different hosts, but this is hard to maintain and this method does not scale. Docker Registry is a server application that will store and let us download and upload images as required. It provides an API for sharing information and image layers using a Docker client. As a result, we can define a registry as a store and content delivery system for container images. Images will be stored locally using the settings defined at the Docker daemon level. To use remote registries, we will set up different storage backends that can handle S3, Microsoft Azure, OpenStack Swift for cloud environments...