Familiaricémonos con la arquitectura Docker y sus componentes esenciales.
Asumo que tiene un conocimiento básico de Docker. Si no es así, puede consultar este artículo anterior.
Creo que entiende la importancia de Docker en DevOps. Ahora bien, detrás de esta fantástica herramienta, tiene que haber una arquitectura increíble y bien pensada. ¿No es así?
Pero antes de hablar de eso, permítanme mostrarles los sistemas de virtualización anteriores y actuales.
Virtualización tradicional frente a virtualización de nueva generación
Antes, solíamos crear máquinas virtuales, y cada máquina virtual tenía un sistema operativo que ocupaba mucho espacio y la hacía pesada.
Ahora, en el caso de los contenedores Docker, se dispone de un único SO y los recursos se comparten entre los contenedores. De ahí que sea ligero y arranque en segundos.
Arquitectura Docker
A continuación se muestra el diagrama simple de una arquitectura Docker.
Permítame explicarle los componentes de una arquitectura Docker.
Motor Docker
Es la parte central de todo el sistema Docker. Docker Engine es una aplicación que sigue la arquitectura cliente-servidor. Se instala en la máquina anfitriona. Hay tres componentes en el Motor Docker:
- Servidor: Es el demonio Docker llamado dockerd. Puede crear y gestionar imágenes Docker. Contenedores, redes, etc.
- API Rest: Se utiliza para indicar al demonio docker lo que debe hacer.
- Interfaz de línea de comandos (CLI): Es un cliente que se utiliza para introducir comandos docker.
Cliente Docker
Los usuarios de Docker pueden interactuar con Docker a través de un cliente. Cuando se ejecuta cualquier comando docker, el cliente lo envía al demonio dockerd, que lo lleva a cabo. La API de Docker es utilizada por los comandos Docker. El cliente Docker puede comunicarse con más de un demonio.
Registros Docker
Es la ubicación donde se almacenan las imágenes Docker. Puede ser un registro Docker público o un registro Docker privado. Docker Hub es el lugar por defecto de las imágenes Docker, el registro público de sus almacenes. También puede crear y ejecutar su propio registro privado.
Cuando ejecuta los comandos docker pull o docker run, la imagen docker requerida se extrae del registro configurado. Cuando ejecuta el comando docker push, la imagen docker se almacena en el registro configurado.
Objetos Docker
Cuando se trabaja con Docker, se utilizan imágenes, contenedores, volúmenes, redes; todos ellos son objetos Docker.
Imágenes
Las imágenes Docker son plantillas de sólo lectura con instrucciones para crear un contenedor Docker. Una imagen Docker puede extraerse de un hub Docker y utilizarse tal cual, o puede añadir instrucciones adicionales a la imagen base y crear una imagen Docker nueva y modificada. También puede crear sus propias imágenes docker utilizando un dockerfile. Cree un dockerfile con todas las instrucciones para crear un contenedor y ejecútelo; creará su imagen docker personalizada.
La imagen Docker tiene una capa base que es de sólo lectura, y la capa superior se puede escribir. Cuando edita un dockerfile y lo reconstruye, sólo la parte modificada se reconstruye en la capa superior.
Contenedores
Después de ejecutar una imagen docker, se crea un contenedor docker. Todas las aplicaciones y su entorno se ejecutan dentro de este contenedor. Puede utilizar la API de Docker o la CLI para iniciar, detener y eliminar un contenedor Docker.
A continuación se muestra un comando de ejemplo para ejecutar un contenedor docker ubuntu:
docker run -i -t ubuntu /bin/bash
Volúmenes
Los datos persistentes generados por docker y utilizados por los contenedores Docker se almacenan en Volúmenes. Son completamente gestionados por docker a través de docker CLI o Docker API. Los Volúmenes funcionan tanto en contenedores Windows como Linux. En lugar de persistir los datos en la capa de escritura de un contenedor, siempre es una buena opción utilizar volúmenes para ello. El contenido de los volúmenes existe fuera del ciclo de vida de un contenedor, por lo que el uso de volúmenes no aumenta el tamaño de un contenedor.
Puede utilizar la bandera -v o -mount para iniciar un contenedor con un volumen. En este comando de ejemplo, está utilizando el volumen geekvolume con el contenedor geekflare.
docker run -d --name geekflare -v geekvolume:/app nginx:latest
Redes
La red Docker es un pasaje a través del cual todos los contenedores aislados se comunican. Existen principalmente cinco controladores de red en docker:
- Puente: Es el controlador de red por defecto para un contenedor. Se utiliza esta red cuando su aplicación se ejecuta en contenedores aislados, es decir, cuando varios contenedores se comunican con el mismo host docker.
- Host: Este controlador elimina el aislamiento de red entre los contenedores Docker y el host Docker. Se utiliza cuando no necesita ningún aislamiento de red entre el host y el contenedor.
- Superposición: Esta red permite que los servicios del enjambre se comuniquen entre sí. Se utiliza cuando los contenedores se ejecutan en distintos hosts Docker o cuando los servicios del enjambre están formados por varias aplicaciones.
- Ninguna: Este controlador desactiva todas las redes.
- macvlan: Este controlador asigna direcciones mac a los contenedores para que parezcan dispositivos físicos. El tráfico se enruta entre los contenedores a través de sus direcciones mac. Esta red se utiliza cuando se desea que los contenedores parezcan un dispositivo físico, por ejemplo, durante la migración de una configuración VM.
Conclusión
Espero que esto le dé una idea sobre la arquitectura Docker y sus componentes esenciales. Navegue por Docker para aprender más y si está interesado en obtener una formación práctica, entonces eche un vistazo a este curso Docker Mastery.