Tema:
Implementación y Despliegue de Aplicaciones ASP.NET en Contenedores Docker sobre Linux
Introducción
En el mundo del desarrollo moderno, la combinación de .NET con Docker permite crear aplicaciones portátiles y escalables que pueden ejecutarse en cualquier entorno. Esta guía proporciona un enfoque práctico para configurar el entorno de desarrollo en Linux, instalar .NET SDK, ejecutar aplicaciones localmente y desplegarlas en contenedores Docker. Además, se explorará cómo construir y publicar imágenes de contenedores en Docker Hub, facilitando la distribución y escalabilidad de las aplicaciones.
Objetivo
Objetivo General:
- Configurar un entorno de desarrollo en Linux para la creación, prueba y despliegue de aplicaciones ASP.NET en contenedores Docker, asegurando la correcta gestión del ciclo de vida de las imágenes y contenedores.
Configurar el repositorio de paquetes en el sistema operativo
-
Descargar el repositorio de paquetes:
sudo yum install wget -ysudo wget -O /etc/yum.repos.d/microsoft-prod.repo \ https://packages.microsoft.com/rocky/9/prod/config.repo -
Listar los repos y verificar que el nuevo repositorio este disponible
dnf repolist -
Realizar la instalación de
dotnet-sdkEl paquete SDK también se encarga de instalar el paquetesudo dnf install -y dotnet-sdk-9.0dotnet-runtime -
Validar la instalación de
dotnet:dotnet --version
Validar la ejecución manualmente
-
Clonar un repositorio de un aplicativo de ejemplo:
git clone https://github.com/dotnet/dotnet-docker -
Moverse al directorio
dotnet-docker/samples/aspnetapp/aspnetappcd ~/dotnet-docker/samples/aspnetapp/aspnetapp -
Probar la ejecución de forma local del aplicativo para comprobar que funciona correctamente:
dotnet run -
Probar el acceso al aplicativo por medio de la siguiente URL, puede ejecutarlo abriendo otra terminal:
curl http://localhost:5121Ctrl + c
Construir y Desplegar un aplicativo ASPNET en Docker Container
-
Moverse al directorio
dotnet-docker/samples/aspnetappcd ~/dotnet-docker/samples/aspnetapp -
Explorar el archivo
Dockerfileubicado en este directorio, y revisar sus instrucciones:cat Dockerfile# Learn about building .NET container images: # https://github.com/dotnet/dotnet-docker/blob/main/samples/README.md FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:9.0 AS build ARG TARGETARCH WORKDIR /source # Copy project file and restore as distinct layers COPY --link aspnetapp/*.csproj . RUN dotnet restore -a $TARGETARCH # Copy source code and publish app COPY --link aspnetapp/. . RUN dotnet publish -a $TARGETARCH --no-restore -o /app # Runtime stage FROM mcr.microsoft.com/dotnet/aspnet:9.0 EXPOSE 8080 WORKDIR /app COPY --link --from=build /app . USER $APP_UID ENTRYPOINT ["./aspnetapp"] -
Realizar la construcción del la imágen de contenedor usando el siguiente comando, asegurarse se reemplazar
your_user_namepor su usuario de Docker Hub:docker build -t your_user_name/aspnetapp . -
Verificar que la imágen de contenedor se creo correctamente:
docker images -
Hacer Docker push de la imágen creada anteriormente hacia Docker Hub, utilizando su usuario:
docker push your_user_name/aspnetapp -
Eliminar la imágen creada localmente
docker rmi your_user_name/aspnetapp -
Verificar las imágenes que existen en el servidor local:
docker images -
Ejecutar un contenedor a partir de la imágen subida al Docker Hub:
docker run -p 30080:8080 -d --name aspnetcore_sample your_user_name/aspnetapp -
Abrir un nevegador web en su computadora local y verificar el aplicativo de ejemplo desplegado, asegurarse de reemplazar por el FQDN correspondiente:
http://student-0-aio.35-227-133-255.nip.io:30080
Construir Manualmente y Desplegar un aplicativo ASPNET en Docker Container
-
Moverse al directorio
dotnet-docker/samples/aspnetapp/aspnetappcd ~/dotnet-docker/samples/aspnetapp/aspnetapp -
Ejecutar el comando
dotnet publish:dotnet publish -c Release -o published -
Probar el aplicativo construido manualmente, ejecutando el siguiente comando:
dotnet published/aspnetapp.dll -
Probar el acceso al aplicativo por medio de la siguiente URL, puede ejecutarlo abriendo otra terminal:
curl http://localhost:5000Ctrl + c -
Crear un Dockerfile como el siguiente ejemplo, y colocarle de nombre
Dockerfile.manualFROM mcr.microsoft.com/dotnet/aspnet:9.0 AS runtime WORKDIR /app COPY published/ ./ ENTRYPOINT ["dotnet", "aspnetapp.dll"] -
Realizar la construcción del la imágen de contenedor usando el siguiente comando, asegurarse se reemplazar
your_user_namepor su usuario de Docker Hub:docker build -t your_user_name/aspnetapp-manual -f Dockerfile.manual . -
Verificar que la imágen de contenedor se creo correctamente:
docker images -
Hacer Docker push de la imágen creada anteriormente hacia Docker Hub, utilizando su usuario:
docker push your_user_name/aspnetapp-manual -
Eliminar la imágen creada localmente
docker rmi your_user_name/aspnetapp-manual -
Verificar las imágenes que existen en el servidor local:
docker images -
Ejecutar un contenedor a partir de la imágen subida al Docker Hub:
docker run -p 30081:8080 -d --name aspnetcore_sample_manual your_user_name/aspnetapp-manual -
Abrir un nevegador web en su computadora local y verificar el aplicativo de ejemplo desplegado, asegurarse de reemplazar por el FQDN correspondiente:
http://student-0-aio.35-227-133-255.nip.io:30081
Limpieza del ambiente
Eliminar los contenedores creados:
docker rm -f aspnetcore_sample aspnetcore_sample_manual
Eliminar las imágenes de conteendores creadas:
docker rmi your_user_name/aspnetapp your_user_name/aspnetapp-manual
Eliminar los directorios de trabajo:
cd ~/
rm -fR cd ~/dotnet-docker