Skip to content

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

  1. Descargar el repositorio de paquetes:

    sudo yum install wget -y
    
    sudo wget -O /etc/yum.repos.d/microsoft-prod.repo \
    https://packages.microsoft.com/rocky/9/prod/config.repo
    

  2. Listar los repos y verificar que el nuevo repositorio este disponible

    dnf repolist
    

  3. Realizar la instalación de dotnet-sdk

    sudo dnf install -y dotnet-sdk-9.0
    
    El paquete SDK también se encarga de instalar el paquete dotnet-runtime

  4. Validar la instalación de dotnet:

    dotnet --version
    

Validar la ejecución manualmente

  1. Clonar un repositorio de un aplicativo de ejemplo:

    git clone https://github.com/dotnet/dotnet-docker
    

  2. Moverse al directorio dotnet-docker/samples/aspnetapp/aspnetapp

    cd ~/dotnet-docker/samples/aspnetapp/aspnetapp
    

  3. Probar la ejecución de forma local del aplicativo para comprobar que funciona correctamente:

    dotnet run
    

  4. Probar el acceso al aplicativo por medio de la siguiente URL, puede ejecutarlo abriendo otra terminal:

    curl http://localhost:5121
    
    Ctrl + c
    

Construir y Desplegar un aplicativo ASPNET en Docker Container

  1. Moverse al directorio dotnet-docker/samples/aspnetapp

    cd ~/dotnet-docker/samples/aspnetapp
    

  2. Explorar el archivo Dockerfile ubicado 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"]
    

  3. Realizar la construcción del la imágen de contenedor usando el siguiente comando, asegurarse se reemplazar your_user_name por su usuario de Docker Hub:

    docker build -t your_user_name/aspnetapp .
    

  4. Verificar que la imágen de contenedor se creo correctamente:

    docker images
    

  5. Hacer Docker push de la imágen creada anteriormente hacia Docker Hub, utilizando su usuario:

    docker push your_user_name/aspnetapp
    

  6. Eliminar la imágen creada localmente

    docker rmi your_user_name/aspnetapp
    

  7. Verificar las imágenes que existen en el servidor local:

    docker images
    

  8. 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
    

  9. 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

  1. Moverse al directorio dotnet-docker/samples/aspnetapp/aspnetapp

    cd ~/dotnet-docker/samples/aspnetapp/aspnetapp
    

  2. Ejecutar el comando dotnet publish:

    dotnet publish -c Release -o published
    

  3. Probar el aplicativo construido manualmente, ejecutando el siguiente comando:

    dotnet published/aspnetapp.dll
    

  4. Probar el acceso al aplicativo por medio de la siguiente URL, puede ejecutarlo abriendo otra terminal:

    curl http://localhost:5000
    
    Ctrl + c
    

  5. Crear un Dockerfile como el siguiente ejemplo, y colocarle de nombre Dockerfile.manual

    FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS runtime
    WORKDIR /app
    COPY published/ ./
    ENTRYPOINT ["dotnet", "aspnetapp.dll"]
    

  6. Realizar la construcción del la imágen de contenedor usando el siguiente comando, asegurarse se reemplazar your_user_name por su usuario de Docker Hub:

    docker build -t your_user_name/aspnetapp-manual -f Dockerfile.manual .
    

  7. Verificar que la imágen de contenedor se creo correctamente:

    docker images
    

  8. Hacer Docker push de la imágen creada anteriormente hacia Docker Hub, utilizando su usuario:

    docker push your_user_name/aspnetapp-manual
    

  9. Eliminar la imágen creada localmente

    docker rmi your_user_name/aspnetapp-manual
    

  10. Verificar las imágenes que existen en el servidor local:

    docker images
    

  11. 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
    

  12. 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