¿Qué ocurre realmente cuando ejecutas un contenedor Docker?
Escribes:
docker run nginx
Unos segundos después nginx está funcionando.
Puede parecer que Docker acaba de crear una pequeña computadora dentro de tu computador.
Pero eso no es realmente lo que ocurre.
Todo comienza con una imagen
Docker necesita una imagen que contenga los elementos necesarios para ejecutar la aplicación.
Las imágenes normalmente están construidas mediante capas.
Eso permite reutilizar partes que ya existen en el sistema y evita descargar o almacenar todo nuevamente.
Después aparece el contenedor
Docker utiliza la imagen como base y crea un entorno donde ejecutará la aplicación.
Aquí aparece una diferencia fundamental:
una imagen y un contenedor no son lo mismo.
La imagen es reutilizable.
El contenedor es una instancia creada a partir de ella.
En el fondo hay procesos
En Linux, un contenedor no necesita ejecutar un sistema operativo completo independiente.
La aplicación se ejecuta como uno o varios procesos que comparten el kernel del host.
Entonces, ¿cómo consigue Docker que parezca un entorno independiente?
Namespaces: aislamiento
Linux dispone de mecanismos llamados namespaces.
Gracias a ellos, un proceso puede tener una visión aislada de elementos como:
- procesos
- interfaces de red
- puntos de montaje
- usuarios
- hostname
Para la aplicación, parece que existe dentro de su propio entorno.
Cgroups: controlar recursos
También necesitamos evitar que un contenedor consuma todos los recursos de la máquina.
Para eso Linux dispone de los cgroups.
Permiten gestionar y contabilizar recursos como:
- CPU
- memoria
- entrada y salida
Docker utiliza estos mecanismos para aplicar límites a los contenedores.
¿Qué ocurre con la red?
Docker también puede crear redes virtuales.
Por ejemplo:
docker run -p 8080:80 nginx
Aquí estamos indicando que el tráfico recibido en el puerto 8080 del host pueda llegar al puerto 80 utilizado por nginx dentro del contenedor.
¿Y los datos?
Un contenedor puede eliminarse.
Pero nuestros datos muchas veces deben sobrevivir.
Para eso existen los volúmenes.
Los volúmenes permiten almacenar información fuera de la capa efímera del contenedor.
Son especialmente importantes cuando trabajamos con bases de datos.
Entonces, ¿qué hay detrás de docker run?
Podemos visualizarlo así:
IMAGEN
↓
PROCESO
↓
AISLAMIENTO
↓
CONTROL DE RECURSOS
↓
RED
↓
ALMACENAMIENTO
↓
CONTENEDOR
Docker hace que toda esta coordinación parezca sencilla.
Y esa es precisamente una de sus mayores virtudes.
🎧 En Tu Código Cotidiano preparé un episodio corto explicando todo este recorrido:
¿Qué ocurre dentro de Docker cuando ejecutas un contenedor?

Top comments (0)