Familiaricémonos con la arquitectura de Docker y sus componentes esenciales.

Supongo que tiene una comprensión básica de Docker. Si no, puede consultar este artículo anterior.

Creo que comprende la importancia de Docker en DevOps. Ahora, detrás de esta fantástica herramienta, tiene que haber una arquitectura asombrosa y bien pensada. ¿No es así?

Pero antes de hablar de eso, permítanme mostrar los sistemas de virtualización anteriores y actuales.

Traditional vs. New-Generation Virtualization

Anteriormente, solíamos crear máquinas virtuales, y cada VM tenía un sistema operativo que ocupaba mucho espacio y lo hacía pesado.

Ahora, en el caso del contenedor de la ventana acoplable, tiene un solo sistema operativo y los recursos se comparten entre los contenedores. Por lo tanto, es ligero y arranca en segundos.

Tradicional vs nueva generación

Docker Architecture

A continuación se muestra el diagrama simple de una arquitectura de Docker.

Arquitectura de Docker

Déjame explicarte los componentes de una arquitectura Docker.

Docker Engine

Es la parte central de todo el sistema Docker. Docker Engine es una aplicación que sigue arquitectura cliente-servidor. Está instalado en la máquina host. Hay tres componentes en Docker Engine:

  • Servidor: Es el demonio de la ventana acoplable llamado Dockerd. Puede crear y administrar imágenes de la ventana acoplable. Contenedores, redes, etc.
  • API de descanso: Se utiliza para indicar al demonio de la ventana acoplable qué hacer.
  • Interfaz de línea de comandos (CLI): Es un cliente que se usa para ingresar comandos de docker.

Cliente Docker

Los usuarios de Docker pueden interactuar con Docker a través de un cliente. Cuando se ejecuta cualquier comando de docker, el cliente los envía al demonio dockerd, que los ejecuta. Los comandos de Docker utilizan la API de Docker. El cliente de Docker puede comunicarse con más de un demonio.

Registros de Docker

Es la ubicación donde se almacenan las imágenes de Docker. Puede ser un registro de ventana acoplable público o un registro de ventana acoplable privado. Docker Hub es el lugar predeterminado de las imágenes de la ventana acoplable, el registro público de sus tiendas. También puede crear y ejecutar su propio registro privado.

Cuando ejecuta los comandos docker pull o docker run, la imagen de la ventana acoplable requerida se extrae del registro configurado. Cuando ejecuta el comando docker push, la imagen de la ventana acoplable se almacena en el registro configurado.

Objetos Docker

Cuando trabaja con Docker, usa imágenes, contenedores, volúmenes, redes; todos estos son objetos de Docker.

Imágenes

Las imágenes de Docker son plantillas de solo lectura con instrucciones para crear un contenedor de Docker. La imagen de Docker puede extraerse de un concentrador de Docker y usarse tal como está, o puede agregar instrucciones adicionales a la imagen base y crear una imagen de Docker nueva y modificada. Puede crear sus propias imágenes de la ventana acoplable también utilizando un archivo acoplable. Cree un dockerfile con todas las instrucciones para crear un contenedor y ejecutarlo; creará su imagen de ventana acoplable personalizada.

La imagen de Docker tiene una capa base que es de solo lectura y la capa superior se puede escribir. Cuando edita un archivo docker y lo reconstruye, solo la parte modificada se reconstruye en la capa superior.

Contenedores

Después de ejecutar una imagen de la ventana acoplable, crea un contenedor de la ventana acoplable. Todas las aplicaciones y su entorno se ejecutan dentro de este contenedor. Puede usar la API o la CLI de Docker para iniciar, detener y eliminar un contenedor de Docker.

A continuación se muestra un comando de muestra para ejecutar un contenedor docker de ubuntu:

docker run -i -t ubuntu /bin/bash

Volúmenes

Los datos persistentes generados por Docker y utilizados por los contenedores de Docker se almacenan en Volumes. Están completamente administrados por Docker a través de Docker CLI o Docker API. Los volúmenes funcionan en contenedores de Windows y Linux. En lugar de conservar los datos en la capa de escritura de un contenedor, siempre es una buena opción utilizar volúmenes para ello. El contenido del volumen existe fuera del ciclo de vida de un contenedor, por lo que usar el volumen no aumenta el tamaño de un contenedor.

Puede usar el indicador -v o –mount para iniciar un contenedor con un volumen. En este comando de muestra, está usando geekvolume volume 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 se comunican todos los contenedores aislados. Hay principalmente cinco controladores de red en la ventana acoplable:

  1. Puente: Es el controlador de red predeterminado para un contenedor. Utiliza esta red cuando su aplicación se ejecuta en contenedores independientes, es decir, varios contenedores que se comunican con el mismo host de la ventana acoplable.
  2. Anfitrión: Este controlador elimina el aislamiento de red entre los contenedores de la ventana acoplable y el host de la ventana acoplable. Se utiliza cuando no necesita ningún aislamiento de red entre el host y el contenedor.
  3. Superposición: Esta red permite que los servicios de enjambre se comuniquen entre sí. Se utiliza cuando los contenedores se ejecutan en diferentes hosts de Docker o cuando los servicios de enjambre están formados por múltiples aplicaciones.
  4. Ninguna: Este controlador desactiva todas las redes.
  5. macvlan: Este controlador asigna direcciones mac a los contenedores para que parezcan dispositivos físicos. El tráfico se enruta entre contenedores a través de sus direcciones mac. Esta red se utiliza cuando desea que los contenedores se vean como un dispositivo físico, por ejemplo, al migrar una configuración de VM.

En resumen

Espero que esto le dé una idea sobre la arquitectura de Docker y sus componentes esenciales. Navegue por Docker para obtener más información y, si está interesado en recibir capacitación práctica, consulte este Curso de dominio de Docker.