¿Por qué Docker?

Abstracciones

Usamos la abstracción para poder hacer frente a la gran cantidad de información que nuestros sentidos reciben todo el tiempo, al filtrar y enfocarnos en lo que realmente necesitamos, sin esa capacidad no podríamos funcionar adecuadamente en la vida.

Cuando hablamos de aplicaciones, es útil abstraerlas como paquetes. Hay algunas operaciones que nos gustaría realizar sobre esos paquetes, que finalmente se entregarán a un cliente o usuario.

Estos de las operaciones que nos gustaría aplicar sobre dichos paquetes: (ciclo de vida del software simplificado):

  1. Crear el paquete
  2. Probar la calidad del paquete
  3. Enviar el paquete
  4. Monitorear el paquete
  5. Entregar el paquete

Interfaces

Una interfaz sirve como un medio de comunicación entre dos cosas, si pensamos en el software, podemos hablar de interfaces de usuario, si hablamos de humanos el lenguaje también es una interfaz. Entonces, las interfaces son formas de interactuar o comunicarse con algo. Si tenemos interfaces bien definidas en nuestro paquete de software, va a ser mucho mas sencillo realizar las operaciones necesarias, independientemente de las tecnologia subyacente.

Docker

Docker proporciona una abstracción llamada contenedor y una interfaz bien definida para ese contenedor. Además de ser una gran abstracción para las aplicaciones en general, impone el aislamiento de esa aplicación a nivel de sistema operativo.

Docker es una tecnología relativamente nueva que actualmente se sabe proporciona una solución para una utilización más eficiente de los recursos de infraestructura y el aislamiento de las aplicaciones, creando una abstracción sobre LXC o contenedores de Linux, en resumen LXC proporciona una interfaz al «user space» del kernel de Linux, que permite crear procesos que pueden acceder directamente al kernel. Un concepto importante y clave aquí, es cómo podemos crear un proceso aislado dentro de otro SO, que se asemeja a la virtualización de hipervisores o «Máquinas virtuales», en esa categoría estamos acostumbrados a software como VirtualBox, VMWare o KVM. La diferencia clave es LXC los procesos pueden acceder al kernel directamente, mientras que la virtualización realmente simula o virtualiza el hardware para ejecutar un sistema operativo completo.

VM's vs Docker

El uso de Docker en comparación con maquinas vertuales para aislar nuestras aplicaciones, nos permite utilizar los recursos de infraestructura de manera eficiente al proporcionar una forma de empaquetar las aplicaciones con solo los recursos necesarios.

Tener aplicaciones «envueltas» en contenedores Docker tiene muchos beneficios, ya que no será necesario instalar todas las dependencias para lenguajes específicos en los servidores, sino solo Docker. Eso nos permite concentrarnos en la automatización y la estandarización del proceso de implementación sin tener que pensar en una cantidad interminable de requisitos previos y dependencias para diferentes lenguajes y herramientas.

Conceptos de Docker

Estos son algunos de los conceptos básicos de docker, pero no necesariamente todos.

Docker Image

Un Docker Image es un paquete independiente y ejecutable de un software que podría haberse implementado en cualquier lenguaje y contiene todo lo que necesita para ejecutarse. Por ejemplo, si ejecutamos una aplicación Java, uno de los requisitos del container para incluir sería la JVM y el archivo .jar de la aplicación.

Docker Container

Luego de tener una Docker Image lista, que podemos implementar utilizando las herramientas de Docker (Docker CLI), ahora deseamos ejecutar una aplicación basada en esa imagen, esa instancia en ejecución se llama contenedor.

Docker Registry

Es un servidor que almacena y permite distribuir Docker Images.

Más información sobre el Docker Registry aquí: https://www.docker.com/what-container https://docs.docker.com/registry/

Conclusión

En el desarrollo de software normalmente seleccionamos la herramienta adecuada para el trabajo, eso nos ayuda a implementar soluciones para problemas de manera efectiva, pero a menudo nos vemos limitados por la complejidad del tema operativo de diferentes tecnologías / lenguajes. Docker reduce en gran medida esa complejidad al proporcionar una interfaz común que facilita el razonamiento sobre problemas de software comunes como la implementación, despliegue, seguridad, y el monitoreo.


comments powered by Disqus