02 enero 2020

Doker y contenedores

Acabo de instalar Docker en mi Raspberry Pi y también en el notebook. Averiguando sobre las aplicaciones en la nube y el software como servicio me encontré con esto que puede ser una tecnología tan importante como lo fueron en su momento Windows, MacOs o las máquinas virtuales y como me gusta ser el primero en saber estas cosas no quiero perdérmelas ni por nada.

No es algo fácil de aprender, me recuerda mi primera clase de magnetismo, donde era profesor mi buen amigo Tito Torres y partió escribiendo las Ecuaciones de Maxwell. Era como si estuviera escribiendo en geroglíficos porque todavía no teníamos idea siquiera de lo que significaban los símbolos de gradiente, rotor y divergencia. Para que hablar de su significado conceptual: era "chino".

Con esto de los contenedores pasa algo muy parecido, porque usa palabras que uno no tiene la menor idea de lo que significan, son esas cosas que solo se pueden aprender practicando, echando a perder y y tratando de arreglar. En eso estoy ahora.

Se podría decir que los contenedores son una extensión del concepto de máquinas virtuales. Ustedes me preguntará ¿y qué diablos son las máquinas virtuales? Bueno, simplificando podemos decir que son programas, software que simula ser un computador físico. Así por ejemplo, podemos instalar en nuestro computador con sistema operativo Windows un programa de virtualización, como VirtualBox por ejemplo, que nos permita desplegar una ventana dentro de nuestra pantalla que sea como un computador Linux por ejemplo, o bien otra versión de Windows, etc.

Estas se llaman "máquinas virtuales" y todo lo que se hace con ellas ocurre con un aislamiento total del computador y el sistema operativo "anfitrión" donde corre el software de virtualización. Es decir, aunque comparten recursos físicos (memoria RAM, disco, adaptador de red, etc.) funcionan completamente aislados desde el punto de vista lógico. Si un virus toma el control en una máquina virtual, por ejemplo, es imposible que se traspase al computador anfitrión, porque lógicamente son máquinas diferentes.


Esto puede tener varios usos interesantes, el mejor de todos es usarlo en los servidores web con mucho usuarios, donde a cada usuario se le crea una máquina virtual, de esta manera en un solo servidor físico se pueden tener alojados a cientos de usuarios con sus respectivos sitios web y servicios y lo que haga un usuario no afectará para nada a los demás. La ventaja de una configuración de esta clase es que la asignación de recursos (memoria, disco, etc.) se pueden ir asignando de manera dinámica, según cada usuario vaya necesitando, lo que baja los costos de manera enorme en comparación a que cada usuario tenga su propio servidor físico.


Bueno, hasta donde voy entendiendo -y si alguien lo sabe mejor que yo que me corrija si me equivoco- Docker es una mejora a este concepto de virtualizar, encapsulando aplicaciones en contenedores que pueden ser descargados como paquetes cerrados, cajas negras a las que solo vemos las entradas y salidas. Por ejemplo podemos encapsular en un contenedor Docker un sistema de servidor web Apache, un motor de base de datos o cosas por el estilo, que se suben a un repositorio público, donde cualquiera los puede descargar.

Me parece -y de esto no estoy muy seguro porque todavía no entiendo completamente el asunto- que Docker es parecido a la idea de la tecnología .NET de Microsoft, que tiene el Entorno Común de Ejecución para Lenguajes (Common Languaje Runtime). Una especie de motor común que tiene todas las bibliotecas que permiten correr distintas "soluciones", que en Microsoft .NET son los lenguajes y las aplicaciones programadas en estos y en Docker su equivalente serían los contenedores.

Me imagino que tal como la infraestructura .NET permite tener módulos de lenguajes más ligeros, que usan un conjunto común de bibliotecas, Docker haría algo más o menos parecido, funcionando como un motor o entorno común de bibliotecas que permiten ejecutar distintas aplicaciones empaquetadas en contenedores ¿Cual es la gracia o la ventaja de todo esto? Me parece que es la palabra "común", es decir que con Docker evitamos el código y los procesos repetidos, lo que permite tener contenedores más pequeños y ligeros de ejecutarse, menos uso del disco, memoria y cosas así

El gran problema de las máquinas virtuales es que son lentas y consumen muchos recursos, la tecnología de contenedores permite empaquetar aplicaciones livianas y rápidas, esto debe ser especialmente útil para las aplicaciones que están "en la nube" , el software como servicio, arrendado, como son por ejemplo los programas de Adobe o Microsoft 360 y la virtualización de servidores web. Supongo que gracias a esto yo pude tener mi servidor web por 5 dólares durante 4 años como los que tengo en http://bradanovic.cl y http://tombrad.com

En fin, si no se entendió nada no se preocupen porque yo tampoco entiendo mucho, estoy recién empezando a usarlo. Instalé Docker en la Raspberry y bajé los contenedores de OpenCV y Tensor Flow, dudo que llegue a usarlos porque no tengo ni idea de machine learning, pero al menos me sivió para ver como se descargan, encienden y apagan los contenedores

6 comentarios:

  1. Son "jaulas" de aislamiento de los recursos del sistema operativo, en mi opinión. Usas recursos de tu mismo sistema operativo host, aunque en forma aislada del sistema de archivos, aunque siempre dentro de tu mismo SO. Algo mucho más liviano que las máquina virtuales, lo bacán es que puedes tener múltiples instancias de una misma imagen ejecutándose. En ese sentido, creo que no se puede comparar con una máquina virtual, son fines distintos.

    ResponderBorrar
  2. Bueno, lo leí entero y como huaso que soy, me di cuenta de una que no era mi poncho.
    Del segmento 4 en adelante e incluido el comentario de Sigfridus, me quedó, rande, rande fijesé mijo.

    ResponderBorrar
  3. Aun NO termino de entender los Bitcoins y sus sistemas de "mineria" y me vienes con Dokers.....
    (modo sarcasmo) Thanks soo much Buddy...! (fin modo sarcasmo)

    ResponderBorrar
  4. al leer el titulo pensé que incursionarías en la importación de mercadería jajajjaja.
    saludos.

    ResponderBorrar
  5. Si SIgfridus, algo que se me olvidó poner es su potencial para tener un computador en la nube. podemos tener una máquina en la cas que tenga solo el sitem operativo y Docker, los contenedores los vamos descargando solo a medida que los useos, si no los necesitamos se quedan en el repositorio. Junto con la instalación de DOcker a uno le entregan un repositorio en Github donde puede guardar sus contenedores, pero hy también repositorios públicos con miles de aplicaciones, sistemas operativos, etc. empaquetadas. No s necesario tenerlas localmente hasta que se ocupen! al menos eso creo.

    Marcelo, no os preocupeis, yo también ando dando palos de ciego, pero experimentando se entiende mejor la cosa, en la medida que lo vaya entendiendo trataré de explicarlo mejor

    Anónimo, mejor no te calientes la cabeza con los Bitcoins, son más chuecos que la economía china. El blockchain puede que se empiece a usar pero no creo que sea en referencia a dinero o inversiones, sino para otras cosas.

    Esto de los contenedores yo creo que se va a popularizar junto con el uso de plicaciones en la nube, tal vez todos terminaremos usándolo. Creo que lo primero práctico que trataré de instalar será una VPN y el Motion Eye, ahi contaré como me fue,


    Rodrigo, algo se parece a los contenedores de lata y el transporte de mercadeías, al menos en el sentido figurado parece una buena analogía. De hecho los tres servicios en la nube que existen: Amazon Web Services, Google Cloud y Micrsoft Azure usan doker, contenedores yracimos de contenedores que les llaman Kubettes o algo así, todavía no llego a entender eso pero de a poco vamos

    ResponderBorrar
  6. Estimado Tomás,

    Primero lo más importante: Felíz año nuevo y espero que este se nos venga mejor que el anterior!

    Sobre los contenedores tienen pinta de funcionar muy parecido a wine:

    https://www.winehq.org/

    Te permite ejecutar aplicaciones windows en otros sistemas operativos, sin tener que utilizar una máquina virtual completa. Si mal no recuerdo wine "engaña" al programa haciéndole creer que está en un máquina con windows y sólo carga los elementos de ese sistema operativo cuando los necesita.

    Saludos.

    ResponderBorrar

"Send me a postcard, drop me a line
Stating point of view
Indicate precisely what you mean to say
Yours sincerely, wasting away
Give me your answer, fill in a form
Mine for evermore
Will you still need me, will you still feed me
When I'm sixty-four"