Docker's documentation defines an image as a read-only template with the instructions to create a container, and a container as a runnable instance of an image. A Dockerfile lists the commands that assemble the image. Multi-stage builds keep the final image small by leaving build tools behind. Registries, with Docker Hub as the public default, store and distribute images. Docker Compose describes an application of several containers, with their networks and volumes, in one YAML file. BuildKit and buildx can build one image for several platforms.
Volumes are storage managed by Docker that exists independently of any container, and Docker does not remove unused volumes automatically. Networks matter too: the default bridge network does not let containers find each other by name, while user-defined networks do.