DEV Community

Tu codigo cotidiano
Tu codigo cotidiano

Posted on

¿Qué ocurre realmente cuando ejecutas un contenedor Docker?

¿Qué ocurre realmente cuando ejecutas un contenedor Docker?

Escribes:

docker run nginx
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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?

https://tucodigocotidiano.yarumaltech.com/escuchar-podcast/que-ocurre-dentro-de-docker-cuando-ejecutas-un-contenedor/

Top comments (0)