12.28.2015

Qué es Docker? - Introducción a los contenedores

Los contenedores representan el siguiente paso en el "deployment" de aplicaciones a nivel de infraestructura. En este post vamos a definir lo que es un contenedor, cuales son sus ventajas y en entradas posteriores vamos a ver como usarlo en Linux, Mac y Windows. Al final de esta serie, vamos a utilizar VSCode para desarrollar un aplicativo utilizando node.js y mongoDb.

Un poco de historia

Para entender los contenedores, debemos hacer un poco de historia acerca de como se ejecutaban las aplicaciones hace unos pocos años atrás. Es importante destacar que todo es acerca de "las aplicaciones", y en realidad el sistema operativo existe para facilitar la ejecución de las aplicaciones. 
Hasta hace poco tiempo atrás ocupábamos servidores físicos para ejecutar nuestras aplicaciones, y en la mayoría de los casos cuando teníamos que pedir un servidor debíamos esperar semanas e incluso meses para obtenerlo; aun mas, como el hardware era costoso de adquirir y almacenar, ejecutábamos varias aplicaciones en el mismo servidor violentando el principio de aislamiento de las aplicaciones.

La virtualización

Este desperdicio de recursos y problemas que se generan por ejecutar varias aplicaciones en un mismo servidor se corrigió con la llegada de las máquinas virtuales. La creación de varias máquinas en un solo hardware nos dio la posibilidad de optimizar el uso de los servidores que se adquirían permitiéndonos asilar las aplicaciones unas de las otras tal y como se ve en la siguiente figura.



Sin embargo, no todo fue positivo con el tema de la virtualización ya que las máquinas virtuales empezaron a aparecer de forma descontrolada. Además, el modelo de máquinas virtuales es un modelo que apunta más hacia el sistema operativo que hacia el aplicativo en sí, ya que para cada máquina virtual se requiere tener instalado un sistema operativo que en el caso de Windows requiere licencia, requiere recursos de hardware para ejecutar este sistema operativo tales como memoria, disco y CPU aunque en realidad su verdadero uso sea muy limitado - a nivel de sistema operativo. En resumen digamos que el impuesto a pagar por el uso de máquinas virtuales es bastante alto y cuando los impuestos son altos, los ciudadanos se mudan.

Los contenedores

Pero el escenario de las máquinas virtuales no podía seguir así y aparecieron los contenedores. Un contenedor es un ambiente de ejecución de aplicaciones, los cuales son mucho más livianos que una máquina virtual, porque no requieren crear toda la máquina virtual para crear un ambiente aislado de ejecución, sino que solamente se crea un contenedor similar a una máquina virtual, que se comporta como una máquina aislada pero que comparte sus recursos tales como CPU y memoria del servidor con los demás contenedores. La siguiente figura nos muestra mejor como funciona un contenedor.


Como se ve en la figura anterior, los contenedores comparten el mismo sistema operativo y los mismo recursos del sistema operativo pero se ejecutan de manera aislada. Cada contenedor tiene sus propio sistema de archivos, pool de procesos, etc; sin embargo, comparten el sistema operativo, la memoria donde se ejecutan los contenedores, etc.
En un escenario hipotético de comparación de consumo de recursos entre una máquina virtual y un contenedor supongamos que cada OS que se utiliza en la máquina virtual ocupa para ejecutar el sistema operativo 10 gigas de disco duro,  4 Gigas de RAM y 5% del CPU; si queremos 10 máquinas virtuales ocuparíamos 100 Gigas de disco duro 40 Gigas de RAM y 50% del CPU lo que sería muy considerable, mientras que con el contenedor todos esos recursos no se requerirían.
En el siguiente post vamos a trabajar con Docker, el software que ha cambiado la forma en que ejecutamos nuestras aplicaciones.


12.24.2015

Iniciando con mongoDB en Ubuntu - VSCode

Iniciando con una serie de posts acerca del uso de VSCode en linux y Mac, decidí utilizar MongoDb como repositorio para hacer los demos que tengo planeados. En este post vamos a ver algunos comandos basicos para verificar que mongo este funcionando correctamente en ubuntu (en post posteriores lo veremos en mac). El primero paso es instalar mongodb el cual se puede ver en la siguiente figura.


Para verificar que mongodb esta bien instalado procedemos a verificar la versión de mongodb que se esta ejecutando con el siguiente comando:



Como se ve en la figura anterior, tengo instalada la versión 4.2.9.
Si se desea ver el estado del proceso de mongodb procedemos a ejecutar el siguiente comando:
Este comando nos indica si el proceso de mongodb se esta ejecutando y nos indica cual es el processid del mismo.
Por último, si se desea saber sobre cuales puertos esta esuchando mongodb, podemos proceder con el siguiente comando:

Como podemos ver en la figura anterior esta esuchando en el 27017 y en el 28017