ASP.NET Core con Docker


Gustavo Barrientos
ASP.NET Core con Docker

Los contenedores están cambiando de radicalmente la forma en la cual, desarrollamos, distribuimos y corremos aplicaciones.

Actualmente, gracias a un contenedor, podemos construir una aplicación en nuestra laptop, pasarla  a nuestro ambiente de desarrollo y olvidarnos de: “Funcionaba en mi computadora”

ya que correremos un ambiente similar al que tendremos en producción/desarrollo.

Un clásico…

Pero antes debemos entender una serie de preguntas: ¿Que es Docker?, ¿Para que me sirve? y ¿Porque deberia estar usandolo ahorita mismo?.

¿Que es Docker?

Docker es una plataforma de código abierto, con la cual podemos administrar Linux Containers(LXC) en una forma sencilla.

Esto nos permitiria crear ambientes de desarrollo o producción directamente en nuestra computadora y correr una aplicación localmente, de tal forma que podemos llevarlo a un ambiente en producción de forma que el ambiente sea exactamente el mismo.

¿Que es un Contenedor en Docker?

Un contenedor es una capa donde vamos a “envolver” nuestra aplicación, así como sus dependencias y/o herramientas de sistema que necesitemos, como por ejemplo un servidor HTTP, esto sin importar el sistema operativo donde se este ejecutando.

En las imagenes podemos ver las diferencias entre una Máquina Virtual convencional y un contenedor, en primer lugar, en la virtualización tenemos un hypervisor que virtualiza un hardware sobre el cual se le monta el Sistema Operativo asi como nuestra aplicación.

En un contenedor de Docker, esto es más ligero, de forma que se utiliza el Kernel para crear el contenedor,  de tal manera que un contenedor tendrá sus propios procesos, interface de red y subsistema.

Los contenedores están aislados entre sí, por lo cual podemos limitar recursos.

Además, otra “ventaja” es el impacto que tiene en nuestro sistema, mientras una máquina virtual es necesario iniciar un sistema operativo completo, un contenedor se limitara a consumir recursos que la aplicación que reside dentro pueda consumir.

Dockerfile

Un Dockerfile es un archivo en el cual va a contener todos los comandos que necesitamos ejecutar para construir una imágen de un contenedor, aqui podemos definir todas las imágenes que vamos a necesitar e incluso, inicializar algunas variables de sistema, copiar archivos a directorios dentro del contenedor, descargar dependenias de NuGet o Npm etc.

Docker Compose

Docker Compose es una herramienta que nos va a permitir definir y correr aplicaciones multi contenedores.

Para esto, vamos a utilizar un archivo YAML para definir nuestros servicios

Imágenes

Una imágen de un contenedor, podría decirse que es un sistema preconfigurado, con paquetes instalados y dependencias, estas pueden estar compuestas por una o mas imágenes base.

Una imágen esta compuesto por varias capas, que se montan una sobre otra en formato de solo lectura, la ultima capa que se montaria sería, donde está nuestra aplicación.

Registro

Docker almacena las imagenes que construimos en un registro, es no es más que un repositorio con imagenes, existen dos tipos:

  • Públicos
  • Privados

La empresa Docker Inc, tiene un registro público llamado Docker Hub, aquí podemos compartir las imágenes que construyamos para que otras personas puedan utilizarlas, en este repositorio puedes encontrar imágenes de docker para Ubuntu con node.js, nginx, mysql, sqlserver, .net core etc.

Posiblemente necesites un repositorio privado, actualmente podemos usar servicios en la nube Azure, AWS o Google para hospedar nuestras imágenes por un costo mensual.

Por ultimo, tambien nos es posible hostear en nuestra infraestructura, un servidor de Docker Registry, de hecho, ese servidor tambien está en un contenedor!

Taxonomia de Docker

¿Cómo puedo ejecutar una Aplicación ASP.NET Core en Docker?

Bueno, como vimos, tendremos que crear dentro de nuestro proyecto un Dockerfile, con un contenido de ejemplo:

Dockerfile de ejemplo

Con esto descargaremos una imagen previamente configurada con un ambiente de ASP.NET Core 2.0, copiaremos el contenido de nuestro root a /app y lo asignaremos como directorio de trabajo.

Posteriormente se restauraran nuestros paquetes de NuGet y se compilara y se asignara el puerto en el que va a correr, a la variable de entorno ASPNETCORE_URLS.

Para finalizar, podremos correr nuestro proyecto, para entrar podemos hacerlo con http://127.0.0.1.

Conclusion

Para finalizar este post, les voy a dejar un repositorio con un ejemplo de una aplicación asp.net core con docker, pero, corriendo el app con Nginx, la url es: https://github.com/tavobarrientos/dockerizando

Espero sus comentarios via twitter en: @tavobarrientos

Show Comments (0)

Comments