Docker Kézako :

C'est une brique de virtualisation légère open source, mais contrairement aux VM (Virtual Machine) qui embarque un système complet, Docker gère des conteneurs.
Se sont des environnements hyper légers en terme de ressources hardware, physique et système.

On peut le voir par le schéma suivant :
VM vs Contener

Quand je dis qu'il est super léger, c'est par exemple si vous dupliquer un conteneur est que vous y ajouter une modification, ce dernier sera une copie du conteneur avec un autre morceau qui contient la différence, se sont des layers/calques un peu comme avec les logiciels de montage photos :
Les layers Docker

Jusqu'à la version 0.9, Docker utilisé LXC (LinuX Containers) pour s'interfacé avec le système, ce qui le limité à Linux comme système hôte, maintenant Docker utilise par défaut libcontainer (créé par les équipes de Docker) qui lui permet d'être multi-plateforme (Linux, MacOS et Windows).
Docker execdriver

Voici un schéma explicatif des changements/updates d'un conteneur :
Changes_Updates_Containers

La création de son propre container :
Docker Cycle
Note : Le dockerfile permet de gérer ce que l'on souhaite installer comme package lors de la création du conteneur.

Et pour finir, voici une liste de conteneurs officiels Docker :
Docker official repos

Information supplémentaire :

Base de recherche de conteneurs