Introducción a Docker

Introducción a Docker ¿Qué es Docker? ¿Para qué sirve?

¡Hola!

En el siguiente Post veras explicada una introducción a Docker, responderemos a algunas preguntas como que es docker y para que se utiliza, cuando usarlo, sus ventajas, tipos de arquitecturas, las diferencias con las máquinas virtuales y los microservicios.

¿Qué es Docker?

Docker es una plataforma creada con el fin de desarrollar, implementar y ejecutar aplicaciones dentro de contenedores. Lo cual permite a los desarrolladores realizar el empaquetado de nuestras aplicaciones junto a sus correspondientes dependencias dentro de una unidades estandarizadas conocidas bajo el término de contenedores de software.

Aunque existen distintos tipos de implementaciones de contenedores, el más famoso motor para crear contenedores de software es Docker.

Qué es Docker

Máquinas Virtuales vs Docker

Antes de nada debemos entender que es una máquina virtual. Es un software que permite ejecutar un sistema operativo dentro de otro, tiene su propia disco duro, memoria, tarjeta gráfica etc, aunque todos ellos son virtuales. Aunque sean virtuales existen, es decir, todos estos elementos los tiene el ordenador host o anfitrión (donde se está ejecutando la máquina virtual).

Qué es una máquina virtual

Una vez hemos entendido lo que es una máquina virtual podemos ver las diferencias y ventajas de docker. Los contenedores permiten desplegar aplicaciones más rápido, arrancarlas y pararlas más rápido y aprovechar mejor los recursos de hardware. Las máquinas virtuales nos permiten crear sistemas completos totalmente aislados, con mayor control sobre el entorno y mezclando sistemas operativos host y huésped.

Tanto las máquinas virtuales como Docker tiene sus ventajas y desventajas en función de las necesidades y circunstancias de cada desarrollo. En la actualidad por lo general Docker se está convirtiendo en una tecnología indispensable y cada vez se utiliza para más cosas, no solo para desplegar aplicaciones en producción si no para también crear entornos replicables, asegurar que las aplicaciones funcionan en varios entornos diferentes (local, test y producción)


Componentes de Docker

Componentes de Docker

Docker Engine (Docker Host)

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 (client)

Podemos interactuar con Docker a través de un cliente. Cuando ejecutamos cualquier comando de docker, el cliente lo envía al demonio Dockerd, que se encarga de ejecutarlo. Los comandos de Docker utilizan la API de Docker. El cliente de docker puede comunicarse con más de un demonio

Registros de Docker (Registry)

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.


Ventajas de Docker

Retorno de la inversión y ahorro de costos:

En este sentido, Docker puede ayudar a facilitar este tipo de ahorro al reducir drásticamente los recursos de infraestructura. La naturaleza de Docker es que se necesitan menos recursos para ejecutar la misma aplicación. Debido a los requisitos de infraestructura reducidos que tiene Docker, las organizaciones pueden ahorrar en todo, desde los costos del servidor hasta los empleados necesarios para mantenerlos. Docker permite que los equipos de ingeniería sean más pequeños y más efectivos.

Estandarización y productividad

Docker proporciona entornos repetibles de desarrollo, construcción, prueba y producción. La estandarización de la infraestructura de servicio en todo el proceso permite que cada miembro del equipo trabaje en un entorno de paridad de producción. Al hacer esto, los ingenieros están más equipados para analizar y corregir errores de manera eficiente dentro de la aplicación.

Eficiencia de CI

Docker te permite construir una imagen de contenedor y usar esa misma imagen en cada paso del proceso de implementación. Una gran ventaja de esto es la capacidad de separar los pasos no dependientes y ejecutarlos en paralelo. El tiempo que lleva desde la construcción hasta la producción puede acelerarse notablemente.

Compatibilidad y mantenibilidad

Tus imágenes se ejecutan igual sin importar en qué servidor o en qué computadora portátil se ejecutan. Para tus desarrolladores, esto significa menos tiempo dedicado a configurar entornos, depurar problemas específicos del entorno y una base de código más portátil y fácil de configurar. La paridad también significa que tu infraestructura de producción será más confiable y más fácil de mantener.

Simplicidad y configuraciones más rápidas

Los usuarios pueden tomar su propia configuración, ponerla en el código y desplegarla sin ningún problema. Como Docker se puede utilizar en una amplia variedad de entornos, los requisitos de la infraestructura ya no están vinculados con el entorno de la aplicación.

Despliegue rápido

Esto se debe al hecho de que crea un contenedor para cada proceso y no arranca un sistema operativo. Los datos se pueden crear y destruir sin preocuparse de que el costo de volver a hacerlo sea más alto que asequible.

Despliegue continuo y pruebas

Si necesita realizar una actualización durante el ciclo de lanzamiento de un producto, puede realizar fácilmente los cambios necesarios en los contenedores Docker, probarlos e implementar los mismos cambios en sus contenedores existentes. Este tipo de flexibilidad es otra ventaja clave del uso de Docker. Docker realmente le permite construir, probar y lanzar imágenes que pueden implementarse en múltiples servidores. Incluso si hay un nuevo parche de seguridad disponible, el proceso sigue siendo el mismo. Puede aplicar el parche, probarlo y lanzarlo a la producción

Plataformas multi-nube

Uno de los mayores beneficios de Docker es la portabilidad. En los últimos años, todos los principales proveedores de computación en nube, incluidos Amazon Web Services (AWS) y Google Compute Platform (GCP), han adoptado la disponibilidad de Docker y han agregado soporte individual.

Aislamiento

Docker garantiza que sus aplicaciones y recursos estén aislados y segregados. Docker se asegura de que cada contenedor tenga sus propios recursos que están aislados de otros contenedores. Puede tener varios contenedores para aplicaciones separadas que ejecutan pilas completamente diferentes. Docker te ayuda a garantizar la eliminación de aplicaciones limpias ya que cada aplicación se ejecuta en su propio contenedor. Si ya no necesita una aplicación, simplemente puede eliminar su contenedor. No dejará ningún archivo temporal o de configuración en su sistema operativo anfitrión. Además de estos beneficios, utilizar Docker también asegura que cada aplicación solo use los recursos que se les han asignado.

Seguridad

Desde un punto de vista de seguridad, utilizar Docker garantiza que las aplicaciones que se ejecutan en contenedores estén completamente segregadas y aisladas entre sí, lo que le otorga un control total sobre el flujo y la administración del tráfico. Ningún contenedor Docker puede ver los procesos que se ejecutan dentro de otro contenedor. Desde un punto de vista arquitectónico, cada contenedor obtiene su propio conjunto de recursos que van desde el procesamiento hasta las pilas de la red.


Tipos de Arquitecturas

Monolítica

No depende de otros servicios externos a ella y únicamente se centra en sus propios componentes

Arquitectura Monolítica

Microservicios

Ofrece cada uno de los componentes de forma aislada, siendo más fáciles de mantener y de responder frente a distintos niveles de escalabilidad

Explicación de microservicios

Microservicios

Los microservicios son tanto un estilo de arquitectura como un modo de programar software. Con los microservicios, las aplicaciones se dividen en sus elementos más pequeños e independientes entre sí.
Ventajas:

  • - Una arquitectura de microservicios facilita el cambio de una parte de la aplicación sin afectar a otras (bueno para desarrolladores)

  • - No se necesita que se reinicie toda la aplicación cuando algo cambia (bueno para sysadmins)

  • - Permite escalar cada servicio individualmente según sus necesidades.

  • - En vez de necesitar grandes servidores, los microservicios se pueden desplegar en pequeños servidores con los recursos mínimos necesarios.

  • - Añade un extra de flexibilidad, ya que cada microservicio puede ser desarrollado en el lenguaje más adecuado para las operaciones que realiza el servicio

  • - Proporciona un plus de seguridad porque si diferentes partes están aisladas unas de otras, un atacante que pueda hackear un servicio no obtiene el control total de la aplicación.


Cuando Usar Docker

Cuando usamos Docker, evitamos tener que descargar y almacenar un gran numero de Librerías, ya que podremos desarrollar cada aplicación de contenedores de manera independiente. Esta atarea reduce al mismo tiempo los residuos que se pueden haber creado mientras se desarrollaba. Además el propio desarrollo lo ejecutamos en unas condiciones óptimas ya que docker nos permite trabajar en cualquier entorno.

Como hemos comentado anteriormente, Docker nos permite ahorrar tiempo a la hora de hacer testing de nuestras aplicaciones ya que abrir un contenedor es una tarea rápida y podremos dedicar más tiempo al desarrollo.

Un gran punto a tener en cuenta es que a la hora de desplegar un contenedor, trabajaremos con el sistema que hemos definido nosotros, al cual les añadiremos los paquetes y librerías necesarias además de poder recurrir a versiones anteriores para corregir errores o modificaciones etc.

En internet (dockerhub) podremos encontrar multitud de imágenes que necesitemos para nuestros desarrollos.

Pero en cualquier caso, lo más aconsejable es que al principio se le dedique un poco más de tiempo en configurar tu propio contenedor, de forma que a la larga nos de más destreza y nos permita encontrar los problemas más fácilmente.