Docker es un proyecto de código abierto diseñado para ayudar a instalar aplicaciones usando contenedores de software. Según su página oficial:

“Los contenedores de docker envuelven una pieza de software en un sistema de archivos completo que contiene todo lo que necesita para ser ejecutada: código, tiempo de ejecución, herramientas del sistema, y librerías o Cualquier cosa que pueda ser instalada en un servidor. Esto garantiza que el software siempre sera ejecutado de la misma manera independientemente de el ambiente.”

Entonces docker, de virtualizada, nos permite empacar una aplicación en una imagen y correr dicha imagen en cualquier parte.

Sin docker, el aislamiento y otros beneficios pueden lograrse únicamente usando hardware de virtualización, a menudo llamado maquinas virtuales. Las soluciones mas populares para esto son: VirtualBox, VMWare y Parallels. Una máquina virtual emula la arquitectura de una computadora y provee la funcionalidad de una computadora física. Podemos alcanzar el aislamiento total de nuestras aplicaciones si cada una de ellas es entregada y corre sobre una imagen en una maquina virtual separada.

 

Cada aplicación se ejecuta como imágenes diferentes con todas sus dependencias y el sistema operativo anfitrión. Las imágenes son manejadas por el hipervisor, el cual emula la arquitectura de una computadora física. Este método de instalación es ampliamente soportado por herramientas de virtualización como vagrant, y dedicado al desarrollo y a ambientes de pruebas. Sin embargo, la virtualización tiene algunas desventajas significativas:

  • Bajo desempeño Siendo que las máquinas virtuales emulan toda la arquitectura de la computadora para correr el sistema operativo anfitrión, hay un desgaste significativo asociado con cada operación
  • Alto consumo de recursos Emular requiere una gran cantidad de recursos que tienen que asignarse a cada una de las aplicaciones por separado. Por esa razón en una maquina estándar de escritorio solo unas cuantas aplicaciones pueden correr al mismo tiempo.
  • Imágenes de gran tamaño Cada aplicación es entregada con un sistema operativo completo, por lo que instalarlas en un servidor implica almacenar grandes cantidades de información.

Entonces el concepto de contenedores, presenta una solución diferente:

Cada aplicación es entregada con sus dependencias, pero, sin el sistema operativo anfitrión. Las aplicación interactúan directamente con el sistema operativo para eliminar la capa adicional de un segundo sistema operativo completo. Esto resulta en un ahorro de recursos en un mejor desempeño y una forma mas compacta de empacar aplicaciones en contenedores docker.

Hay que notar que en el caso de los contenedores, el aislamiento pasa a nivel de procesos del sistema operativo. Esto no significa que los contenedores compartan sus dependencias. Cada contenedor tiene sus propias dependencias. Cada uno tiene sus propias librerías en la versión correcta, y si alguna de esas dependencias es actualizada no tiene ningún impacto en la de los otros contenedores. Para lograr esto los mecanismos de seguridad de docker se basan en el kernel de linux para aislar los procesos. Esta solución puede ser considerada un poco menos segura que la de poner a correr todo el sistema operativo que ofrecen las maquinas virtuales, pero por los beneficios que ofrece lo vale, y el kernel de linux es muy seguro.

En general docker soluciona una serie de problemas que usualmente se tiene en un proceso de entrega continua.

  • Ambiente se facilita la configuración del ambiente porque las imágenes de docker ya vienen configuradas y aun una persona sin muchos conocimientos técnicos podría ejecutar una aplicación muy compleja.
  • Aislamiento Como ya hemos dicho, docker aisla las aplicaciones y sus dependencias de manera muy eficiente y ahorra muchos recursos.
  • Organización de aplicaciones Al estar aisladas es fácil manejar un servidor con 10 o 15 aplicaciones instaladas y corriendo. Cosa que usualmente seria una pesadilla de archivos de configuración y poca portabilidad.
  • Portabilidad Se acabaron los problemas del tipo: “Migrar la aplicación a un servidor nuevo”. Con docker, instalas la imagen, la corres  fin.

En conclusión: Dockerizen todo! 🙂

Categorized in: