Hosteando una aplicación ASPNET Core en Docker

Julio Avellaneda
4 min readMar 8, 2018

--

Otros post sobre Docker y ASPNET Core:

El mundo de los contenedores, y claramente Docker es uno de los temas más movidos ultimamente, y en realidad en un tema emocionante que abre bastantes posibilidades a digamos una nueva era de aplicaciones, y si hablamos de microservicios, muy seguramente Docker va a entrar en juego.

Publicar, hostear, correr, dockerizar una aplicación ASPNET Core es bastante sencillo, así que en este post voy a mostrar de forma general como dockerizar una aplicación construida en ASPNET Core paso a paso.

Para ello, voy a partir de una sencilla aplicación ASPNET Core, que tiene un controlador el cual retorna un mensaje, el controlador en mención:

public class HomeController : Controller{public IActionResult Index() => Content(“Running ASPNET Core in Docker”);}

Listo, por el momento es todo lo que nuestra aplicación ASPNET Core va a realizar, el siguiente paso es agregar un archivo con el nombre Dockerfile en la raiz del proyecto, dicho archivo va a tener la instrucciones necesarias luego crear la imagen que ejecutará algún contenedor.

La primera instrucciónpermite definir cual es la imagen base a utilizar, en este caso será microsoft/aspnetcore:2.0, imagen que tiene el net core runtime y los paquetes de aspnet core necesarios.

FROM microsoft/aspnetcore:2.0

Luego tenemos:

COPY output /app

Con COPY, indicamos que debe copiar los archivos de la carpeta output del proyecto en la carpeta /app en el contenedor, por el momento output no existe, pero lo vamos a generar cuando hagamos la publicación del proyecto.

Ahora es necesario definir cuál será el folder de trabajo de la aplicación, para ello usamos WORKDIR:

WORKDIR /app

Ahora, es necesario especificar cual puerto del contenedor va a estar escuchado, en este caso se debe usar EXPOSE:

EXPOSE 80

Y finalmente, con ENTRYPOINT definimos el punto de entrada, o basicamente que se va a ejecutar, y como es una aplicación ASPNET Core usamos dotnet y la dll que se va a generar para nuestro proyecto:

ENTRYPOINT [ “dotnet”, “AspNetAndDocker.dll” ]

Finalmente, Dockerfile debe verse:

FROM microsoft/aspnetcore:2.0COPY output /appWORKDIR /appEXPOSE 80ENTRYPOINT [ “dotnet”, “AspNetAndDocker.dll” ]

El siguiente paso es generar la publicación de la aplicación, para ello hacemos uso de dotnet publish:

dotnet publish --configuration Release --output output

El comando anterior publica la aplicación en modo release y deja los archivos/artefactos en un folder llamado output.

Ya tenemos todo listo, ahora el siguiente paso es crear la imagen de Docker, para ello utilizamos docker build:

docker build . -t demo/aspnetcoreanddocker -f Dockerfile

El comando anterior crear una imagen tomando como base el directorio actual, como nombre demo/aspnetcoreanddocker y con -f le especificamos el nombre del archivo a usar, en este caso Dockerfile.

Docker build

Ahora, para verificar que la imagen se creó correctamente, al ejecutar docker images deberíamos ver la imagen creada:

Docker images

Ahora, es necesario crear un nuevo contenedor basado en la imagen creada anteriormente, y en este caso usamos docker create:

docker create -p 3000:80 --name testaspnetdocker demo/aspnetcoreanddocker

Con docker create creamos un nuevo contenedor, el flag -p indica el puerto externo (3000) e interno (80), con -name el nombre del contenedor, y al final el nombre de la imagen a hostear.

Docker create

Para verificar la creación del contenedor, ejecutados docker ps -a, comando que lista todos los contenedores:

Docker containers

Y finalmente, para ejecutar el contenedor utilizamos docker start container_id, y luego con docker ps visualizamos los contenedores en ejecución:

Docker start

Para validar, en el browser ir a localhost:3000 y deberíamos obtener el mensaje Running ASPNET Core in Docker

En el siguiente post, vamos a ver como utilizar volúmenes para persistir información cuando trabajamos con Docker.

Puedes acceder al ejemplo en el siguiente link: ASPNET & Docker

Saludos,

--

--

Julio Avellaneda

Microsoft MVP #ASPNET, #WebApi, #MVC, #KendoUI #Angular #Blogger and learning #NativeScript