Elementos de Docker

Elementos de Docker, ¿Cómo funciona Docker?

¡Hola!

A continuación verás explicados los conceptos de los elementos más importantes de Docker que son: los contenedores(containers), las imágenes(images), los volúmenes(volumes) y las redes(networks).

Los contenedores de Docker

Son instancias en ejecución de una imagen(podrás entender que es una imagen de docker en el siguiente punto). Son los que ejecutan cosas, los que ejecutarán nuestra aplicación. El concepto de contenedor es como si restauráramos una máquina virtual a partir de un .

En sistemas informáticos, una instantánea es el estado de un sistema en un momento determinado. Puede referirse a una copia real del estado de un sistema o a una capacidad que ofrecen ciertos sistemas. Saber más

Podemos ejecutar varios contenedores a partir de una única imagen como vemos en la siguiente ilustración

Explicación de como ejecutar varios contenedores con una imagen

Como deducimos de la imagen anterior, es una muy buena manera de tener copias de nuestra aplicaciones ejecutándose en varios contenedores, para posteriormente, a través de balanceadores de carga, distribuir todos los accesos a la aplicación y así poder ofrecer mas garantías con menos carga de peticiones en cada contenedor.

Como las imágenes no cambian, si creamos un contenedor a partir de una imagen, y mientras que se está ejecutando el contenedor cambiamos algo o instalamos alguna herramienta, cuando paremos dicho contenedor y después volvamos a ejecutar otra vez la misma imagen, esos cambios no se verán reflejados.

Docker va trackeando los cambios en nuestros contenedores como si fuera nuestro GIT (o cualquier herramienta de control de versiones), por lo que si deseamos mantener esos cambios, haciendo un commit del contenedor podemos crear otra imagen que contenga dichos cambios.

Por lo tanto otro beneficio(Ver más beneficios) de Docker, es el versionado de los contenedores. Si algo va mal en nuestra aplicación, podremos volver de forma sencilla a una versión anterior del contenedor, a una versión anterior del entorno.

Explicación de qué son los contenedores de Docker

Las imágenes de Docker

Una imagen es una especie de plantilla, también podríamos considerar una imagen de Docker como una captura del estado de un contenedor. Como dijimos en el punto anterior un contenedor de Docker no es una máquina virtual, pero para que te hagas una idea, podríamos decir que una imagen de un contenedor es como un snapshot de una máquina virtual, pero mucho más ligero.

Por ejemplo una imagen podría contener un sistema operativo Ubuntu con un servidor Apache y tu aplicación web instalada.

Hay muchas imágenes públicas con elementos básicos como PHP, Ubuntu, Apache, MySQL etc, que se pueden descargar muy fácilmente desde dockerhub(desde aquí puedes acceder) y empezar a utilizarlas. Normalmente cuando creamos imágenes, partimos de una imagen padre a la que le vamos añadiendo elementos, por ejemplo, una imagen Ubuntu y Apache que hemos modificado para nuestra aplicación PHP y MySQL.

Las imágenes de Docker se identifican por un ID y un par nombre-version, por ejemplo: httpd:latest, python:3.8.16-slim-bullseye, node:lts-bullseye

Explicación de qué son las imágenes de Docker

Los volúmenes de Docker

Los volúmenes en Docker nos permiten guardar datos persistentes y también nos permiten compartir datos entre múltiples contenedores. Es decir deberemos usar los volúmenes de Docker para evitarnos la perdida de datos cuando borramos los contenedores.

Explicación de qué son los volumenes de Docker

Redes de Docker

Las principales Redes de Docker son las siguientes:

Puente (Bridge)

Es el controlador de red predeterminado para un contenedor. Utilizamos esta red cuando nuestra aplicación se ejecuta en contenedores independientes, es decir, cuando varios contenedores se comunican con el mismo host de la ventana acoplable.

Ninguna (none)

Esta opción se encarga de inhabilitar o desactivar todas las redes de la plataforma de contenedores. Se suele utilizar en conjunto con un control personalizado por nosotros

Anfitrión (Host)

Este controlador elimina el aislamiento de red entre los contenedores de la ventana acoplable y el host de la ventana acoplable.

Explicación de qué son las redes de Docker

Otras redes de Docker:

Superposición(Overlay)

Este controlador permite que los servicios de enjambre se comuniquen entre sí. Se utilizando cuando queremos que los contenedores que se ejecutan en diferentes hosts de Docker o cuando los servicios de enjambre están formados por múltiples aplicaciones.

Ipvlan

Este controlador se encarga de ofrecernos una gestión y control total sobre las direcciones IPv4 e IPv6

Macvlan

Es el controloador de redes de docker que nos permite asignar una dirección MAC a un contenedor determinado para que parezcan dispositivos físicos en nuestra red. De esta manera el daemon de Docker se encarga de enrutar el tráfico hacia los contenedores a través de sus direcciones MAC. Este contenedor de redes en Docker es de gran utilidad para el manejo de aplicaciones que han sido heredadas y esperan conectarse de forma directa con la red física, en lugar de ser enrutadas mediante la pila de red del host.