A container is an image that is currently running, which usually is a single process. Containers are used to package a piece of software, making it lightweight, stand-alone and executable regardless of the environment. Containers include everything that the program needs to run, like code, runtime, system tools, system libraries, settings. Placing a program into a container isolates it from its surroundings and thus allows it to mitigate differences between different environments, reducing conflicts that might arise between teams running different software on the same infrastructure.
The major difference between a container and an image is the top writable layer. All writes to the container that add new or modify existing data are stored in this writable layer. When the container is deleted, the writable layer is also deleted. The underlying image remains unchanged.