Docker y C#: contenedorización de aplicaciones de la A a la Z

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Docker y C#: guía completa para la contenedorización de aplicaciones .NET



La contenedorización se ha convertido en el estándar de facto para el despliegue de aplicaciones modernas. Si desarrolla en C# (.NET), Docker le permite empaquetar su aplicación junto con todas sus dependencias en un contenedor ligero y aislado. En este artículo, recorreremos el camino desde la creación de un Dockerfile simple hasta la publicación y ejecución de una imagen lista. Aprenderá a contenedorizar una aplicación en C#, optimizar el tamaño de la imagen y utilizar las mejores prácticas.



1. Fundamentos de Docker para el desarrollador .NET



Docker es una plataforma para desarrollar, enviar y ejecutar aplicaciones en contenedores. Un contenedor es una unidad de software estandarizada que incluye el código y todas sus dependencias. A diferencia de las máquinas virtuales, los contenedores utilizan el núcleo compartido del sistema operativo, lo que los hace más rápidos y ligeros.



Para C# (.NET), Docker es especialmente útil porque resuelve el problema de "en mi máquina funciona": usted garantiza que la aplicación se comportará igual en la máquina del desarrollador, en el servidor de pruebas y en producción. Los componentes principales son:



  • Docker Engine — el entorno de ejecución de contenedores
  • Dockerfile — un archivo de texto con instrucciones para construir la imagen
  • Imagen (Image) — una plantilla inmutable para crear contenedores
  • Contenedor (Container) — una instancia en ejecución de una imagen


Instale Docker Desktop para Windows/Mac o Docker Engine para Linux. Después de la instalación, verifique el funcionamiento con el comando:



docker --version


2. Creación de un Dockerfile para una aplicación C# (.NET)



Empecemos con una aplicación simple de ASP.NET Core Web API. Cree un nuevo proyecto:



dotnet new webapi -n MyDockerAppcd MyDockerApp


Ahora cree un archivo Dockerfile (sin extensión) en la raíz del proyecto. Aquí tiene una versión básica con compilación en múltiples etapas (multi-stage build):



# Etapa 1: compilación de la aplicaciónFROM mcr.microsoft.com/dotnet/sdk:8.0 AS buildWORKDIR /src

# Copiamos el csproj y restauramos las dependenciasCOPY ["MyDockerApp.csproj", "."]RUN dotnet restore

# Copiamos el resto del código y compilamos el proyectoCOPY . .RUN dotnet publish -c Release -o /app/publish

# Etapa 2: creación de una imagen mínima para la ejecuciónFROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtimeWORKDIR /appEXPOSE 80EXPOSE 443

# Copiamos la aplicación compilada desde la primera etapaCOPY --from=build /app/publish .

# Punto de entradaENTRYPOINT ["dotnet", "MyDockerApp.dll"]


Explicación de las instrucciones clave:

  • FROM — define la imagen base (SDK para compilar, ASP.NET para ejecutar)
  • WORKDIR — establece el directorio de trabajo
  • COPY — copia archivos del contexto de compilación a la imagen
  • RUN dotnet restore — restaura los paquetes NuGet
  • RUN dotnet publish — compila y publica la aplicación
  • EXPOSE — indica los puertos que escuchará el contenedor
  • ENTRYPOINT — comando que se ejecuta al iniciar el contenedor


La compilación en múltiples etapas es críticamente importante para C#: la imagen final contiene solo el runtime y su aplicación, sin el SDK ni los archivos fuente. Esto reduce el tamaño de la imagen de ~1.5 GB a ~200 MB.



3. Compilación y ejecución del contenedor



Compile la imagen Docker:



docker build -t my-dotnet-app:latest .


La bandera -t asigna una etiqueta (nombre:versión). El punto al final indica el directorio actual como contexto de compilación.



Ejecute el contenedor:



docker run -d -p 8080:80 --name my-app my-dotnet-app:latest


Parámetros:

  • -d — ejecución en segundo plano (detached)
  • -p 8080:80 — redirección de puerto: puerto del host 8080

Blogs

Book Recommendations