Docker is an application to create containers for applications.
The main goal of the Docker containers is share applications.
Target application and environment which is needed during the application works packs in image. Often, RAW image is directory hierarchy with needed files that packed in tar archive.
When target image is starting it is being contained (container).
When image arrived to the Docker, then Docker puts it in own storage register in place that called bottom layer. When container of specific image is working, then Docker save all filesystem changes from it to own register too, but in place that called upper layer. If need to save container state to the image, then Docker make upper layer persistent and in future container starting Docker merge lower and upper layer (over AUFS, OverlayFS) during the container are being started. Therefore new images effectively use disk space.
There are huge count of ready containers available in Docker HUB.