Es una plataforma de software para la contenerización que permite que una aplicación y sus dependencias sean empaquetadas en contenedores.
Docker posee 3 elementos principales:
1. Imágenes: Son el componente de compilación de Docker y son las plantillas de solo lectura que definen un sistema operativo de aplicación.
2. Contenedores: Son el componente de ejecución de Docker que son creados a partir de imágenes.
3. Registro: Es el componente de distribución de Docker, donde las imágenes son almacenadas, compartidas y manejadas.
Este concepto ya es antiguo, y viene de Linux, pero por hacerte un símil con el mundo real, imagina un contenedor de esos que suelen llevar los barcos de mercancías, que contiene distintos productos.

Ahora, en el contexto de Docker un contenedor contiene:
La idea detrás de Docker es crear contenedores ligeros y portables para las aplicaciones software que puedan ejecutarse en cualquier máquina con Docker instalado, independientemente del sistema operativo que la máquina tenga por debajo. Docker es una herramienta diseñada para beneficiar tanto a desarrolladores, testers, como administradores de sistemas.
En el caso de los desarrolladores, el uso de Docker hace que puedan centrarse en desarrollar su código sin preocuparse de si dicho código funcionará en la máquina en la que se ejecutará.¿En qué se diferencia Docker de la virtualización tradicional?

En el gráfico, resaltados en color naranja, se listan los componentes que se usan para ejecutar una aplicación tanto en máquina virtual como en Docker; cuando se utilizan máquinas virtuales, es necesario virtualizar todo el sistema operativo, con el gasto
de recursos que eso implica, minimizando la RAM, disco y procesador que podrá usar la aplicación en sí, en cambio, utilizando Docker, la cantidad de recursos para cada aplicación es mayor al usar directamente los binarios y librerías para ejecutar
la aplicación dentro de una imagen.
En ambos casos, las aplicaciones que se ejecuten dentro de la máquina virtual o de la instancia de Docker, están aisladas del sistema operativo anfitrión,
pudiendo ejecutarse tantas máquinas virtuales/instancias de contenedores como
nos permita nuestro hardware. En el caso de Docker, al usarse menos recursos,
es posible tener un mejor rendimiento de aplicaciones por servidor que las máquinas
virtuales.
Arquitectura de Docker

Para que estos tres componentes trabajen juntos, el Docker Daemon (o Docker Engine) se ejecuta en una máquina host y hace el trabajo pesado de construir, correr y distribuir contenedores de Docker. El cliente es un binario Docker que acepta comandos del usuario y se comunica con el Motor.
El cliente se comunica con el motor que está ubicado en el mismo host o en un host diferente. El cliente utiliza el comando de extracción para solicitar al motor que extraiga una imagen del registro.
El motor luego descarga la imagen de Docker Store, o el registro que esté configurado. Se pueden descargar varias imágenes del registro e instalarlas en el motor.