Preparando una Baleada con Todo: .NET Core, Docker, Ubuntu y GX

1 0

Como todos sabemos Genexus es la mera baleada con huevo, aguacate y chorizo (Acá nos gusta bastante, la vitamina CH ¡mal pensados!). Pero al ser una herramienta con tantas funcionalidades, es muy difícil llegar a explotar todo su potencial. Por eso el motivo de estos laboratorios, nos gusta cacharrear, ya que, al estar enfocados en la pestaña de eventos, nos olvidamos de otras cosas. Dentro de estas cosas, podemos tener cosas muy interesantes, como, por ejemplo: Amigo, ¿usted sabía que Microsoft se dio cuenta que Linux es utilizado por la mayoría de los desarrolladores y ahora saca herramientas multiplataformas? Siiii estimado, así como lo leyó, después de que el OS del pingüino fue criticado duramente por Steve Ballmer (Uno de los demonios del apocalipsis tecnológico), ahora Microsoft está planteando una estrategia que me gusta: Dejar de joder.

Entonces al tener un ecosistema más flexible, una herramienta que es la mamá de los pollitos y algo de tiempo libre, he decido hacer una baleada atoradundos, generar una app para Linux, utilizando el Net Core de Microsoft. Ok, ¿En qué nos beneficia? Fácil, mi amigo, no usar Windows del lado del servidor e irnos por el camino del Open Source se traduce a menos costo, más flexibilidad y mejor estabilidad en nuestras aplicaciones.

Pero, antes que nada, ¿cómo nos preparamos?, acá esta su cuñado Louis para servirle. Primero necesitamos saber las siguientes cosas, así que listos y fuera (Tan afuera como los azules después del 27 de enero).

¿Qué #$/(&@ es Net. Core?

.Net Core es simplemente la respuesta de Microsoft hacía el open source. Vieron como Google y Apple empezaban a comerles el mandado y pensaron: ¿Cómo podemos obtener más pisto y no perder clientes?, a lo que Satya Nadella respondió: Regalemos las herramientas y se las sembramos completa en Azure. Así que apareció .Net Core, lo cual es simplemente la implementación del tradicional .NET Framework ahora multiplataforma, se siguen utilizando los lenguajes tradicionales: C# para los millennials y Visual Basic para los dinosaurios.

¿Qué pasa si le agregó un contenedor de Chicharron a la baleada?

Ahora, ¿Qué es Docker? Docker es un software que nos viene a facilitar el manejo de nuestras aplicaciones utilizando una «virtualización light». ¿Como que light? Ok, alguna vez usted ha utilizado una computadora virtual, como tiene que instalar todo y que muchas veces tienen funciones que realmente no va a utilizar y tiene que asignarle bastantes recursos para que funcione bien, ¿Que desperdicio va?, ¿no sería mejor solo tener las funciones del OS que yo solamente voy a necesitar? Acá entra docker, esta herramienta nos ayuda a crear un entorno (Contenedor) que tiene las funciones vitales para ejecutar la aplicación y lo más importante: nosotros podemos configurar estos componentes. ¿Asignación de recursos? Existe, pero de forma minima. En Docker instalar Ubuntu es tan sencillo como correr el siguiente comando:

Docker Run Ubuntu

Acá les dejo una comparativa de la virtualización tradicional contra esta herramienta:

Como podemos observar, al trabajar con formato de unidades de ejecución, Docker nos permite tener distintos ambientes operando bajo un solo Host, esto nos ayuda cuando tenemos distintas configuraciones y versiones. Por ejemplo: Si una parte de nuestra aplicación está corriendo en Python 2 y otra en Python 3.

Ahora que sabemos lo básico, empecemos con la preparación.

Amasando la masa: ¿Qué necesitamos instalar?

Primero, verifiquemos que versión de Genexus estamos corriendo y nos vamos a la información de ese Release. ¿Por qué?, para identificar que versiones podemos utilizar. Al iniciar este tutorial, estaba usando la versión GX17 U5 y está solo es compatible con la versión 5 de .NET Core, y yo de adelantado instalé la versión 6. Resultado: el programa compilaba «bien» pero no se ejecutaba. Así que: revisemos la versión que necesitamos.

Segundo, instalemos docker, es gratis y lo podemos descargar acá. En este caso, podemos usar la última versión, por los momentos funciona con cualquier versión de GX, pero no está demás revisar las notas del release solamente por curarnos en salud.

¿Una baleada con todo? ó ¿Todo en la baleada?

GX ha incluido nuevas herramientas para el deploy de aplicaciones. ¿Recuerdan cuando copiábamos todo el directorio al Inetpub? Bueno, ya no es necesario. Ahora existe una nueva opción llamada: Deployment Units, que nos permite generar varios compilados para su Deploy. En este caso, debemos seleccionar entre los objetos Main y con el arbol de llamados GX hace lo demás.

Para crear nuestro Deployment Unit, nos vamos a la configuración del ambiente y en la parte de Deployment lo creamos, ya dentro de esta opción, seleccionamos los objetos main y listo.

Ya con nuestro deployment unit, ¿Qué hacemos? Pues generar el deploy. Recuerden que el deployment unit es solamente la parametrización de nuestro deploy, pero la ejecución la realizamos en otro lado. Para esto nos vamos a la opción del Menu Build/Deploy Aplication.

Y acá miramos algo interesante, GX nos da la opción de realizar Deploys de diferentes maneras: Local, Docker y Servicios en la Nube. De forma Local, nos crea un .ZIP con todos los archivos necesarios para realizar el deploy de forma manual. Los servicios en la nube, hace un deploy directo en nuestro servicio (Por los momentos, solo se puede con Azure). Y el que nos compete, pues nos crea un contenedor de Docker. Para nuestro ejercicio, seleccionamos Docker Image y le damos deploy. Acá es importante seleccionar nuestro Deployment Unit y darle un nombre legible a nuestro conteneder.

Ahora, ¿Qué sigue? Pues empezamos a ver que nuestra baleada esté cocinada. Para esto, verificamos en docker que la imagen se haya creado. ¿Como?, nos vamos a nuestra línea de comando y corremos:

docker images

Acá nos aparecerán nuestras imágenes y debe aparecernos la que creamos desde GX

¿Como le damos vuelta a la tortilla?

Ahora que ya tenemos nuestra imagen, ¿Como lo movemos hacia nuestro ambiente de Deploy? La opción más sencilla es haciendo uso de Docker Hub. ¿Qué es esta vaina? Imaginemos que es un Git Hub, pero de Docker. Acá debemos crear una cuenta y nuestras imágenes estarán en internet para que podamos hacer uso de ellas. Una vez que tengamos nuestra cuenta, regresamos a la línea de comandos, corremos el Login, pedirá nuestras credenciales y estaremos casi listos para subir nuestra imagen.

Docker Login

Dije que casi va. Si nos falta algo y es colocar un Tag a nuestra imagen, como pueden observar en la imagen de más arriba, nuestra imagen tiene un Tag llamado: Latest, esto lo debemos cambio previo a subirlo y lo hacemos de la siguiente manera:

docker tag [Image ID] [Usuario Docker]/[Nombre de Imagen]:[Nombre de Tag]

Ya con esto si estamos listos, corremos el siguiente comando y se nos subirá a Docker Hub

docker push [Usuario Docker]/[Nombre de Imagen]:[Nombre de Tag]

Saquemo’ esto del Comal

Bueno, ya para terminar. Obviamente bajamos nuestra imagen. Ahora amigo, si antes hicimos un Push, ¿Qué falta hacer? Si dijo Pull lo felicito por poner atención. Luego verificamos, que está se haya descargado y estamos a un paso

sudo docker pull [Usuario Docker]/[Nombre de Imagen]:[Nombre de Tag]

Por último ¡Corremos nuestra imagen! En la linea de comando, corremos lo siguiente:

sudo docker run --rm -p 9999:80 [Usuario Docker]/[Nombre de Imagen]:[Nombre de Tag]

Antes de terminar, hay que explicar tantito el último comando ¿Si?. Primero el flag –rm, le dice a docker que elimine nuestro contenedor cuando lo apaguemos, hay que recordar que los datos están fuera del docker y realizar esto es una buena práctica en el contenedor de la aplicación.

El Flag -p xxxx:xxxx le dice a docker el puerto en el que se publicará la aplicación, recordemos que Docker es una virtualización y tiene sus puertos internos, por lo cual debemos tener un puente del puerto interno al externo. En este caso, el primer puerto representa el externo (Por el cual accederemos desde el navegador) y el segundo el interno.

La última parte, simplemente es la selección de nuestra imagen. Y con esto, nuestra aplicación estará corriendo, la podemos ver en nuestro navegador:

Espero les sirva de algo a todos y cualquier otro experimento que se les ocurra, estamos a la orden para documentarlo.

Happy
Happy
0 %
Sad
Sad
0 %
Excited
Excited
100 %
Sleepy
Sleepy
0 %
Angry
Angry
0 %
Surprise
Surprise
0 %

Average Rating

5 Star
0%
4 Star
0%
3 Star
0%
2 Star
0%
1 Star
0%

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Entrada anterior Dice el alcalde de Tegus que pagen confiadamente, será?
Entrada siguiente Quiero Guardar y Compartir Archivos en la Nube con OneDrive