martes, 18 de febrero de 2020

Docker en Windows parte 8: .Net Core 3.1 con Docker Linux

Hola a todos, ahora veremos como subir una aplicación simple .Net Core a Docker para Linux.
Usaremos Visual Studio Code.

Parte 7: https://naldog.blogspot.com/2019/10/docker-en-windows-parte-7-contenedor-de.html
_____________________________________

NOTA: Antes que nada, disculpar la calidad de las imágenes ya que son imágenes exportadas de un Word.

Referencias



Bajar Visual Studio Code

Es gratis y no muerde.

Instálalo.

Ejecutar Aplicación Net Core y que quede corriendo localmente

Creamos una aplicación simple. Un servicio REST en Net Core.


Abrirlo y abrir terminal (New Terminal)
Escribir

cd c:
mkdir netcore
cd netcore
dotnet new WeatherForecast

Abrir la carpeta netcore
Correr desde la Terminal

dotnet run

Quedará corriendo en port 5001
Entrar al link
https://localhost:5001/WeatherForecast/

Se verá el JSON

Corriéndola desde Docker (Linux)

Ejecutar Docker y debe quedar usando contenedores Linux
Debe decir Switch to Windows containers (quiere decir está en modo Linux)



Agregar dockerfile

Averiguar nombre de DLL del proyecto en bin/debug/netcoreapp3.1
Agregar archivo dockerfile a la raíz del proyecto. Colocar el nombre de la dll, es case sensitive.
El proyecto se llama netcore, por lo tanto, la dll se llama netcore.dll


FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out
# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "netcore.dll"]

Build image

Ir con el terminal a la carpeta donde está el dockerfile y ejecutar:
docker build -t netcore .
Ejecutar

docker images

Debe estar creada la imagen

Correr contenedor

Ejecutarla usando port 8080 externo (equipo local) y 80 (interno del docker)

docker run -d -p 8080:80 --name cnt_app netcore

Debe quedar en estado UP X seconds
Probar usando

Si lo parseamos usando
Se verán los campos más ordenados:

Opcional: habilitar CORS

Habilitar CORS (acceso de otros origines o APIs) sino no se puede consumir desde otro dominio construido con otros Front como Angular.

Startup.cs

public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
            {
                builder.AllowAnyOrigin()
                    .AllowAnyMethod()
                    .AllowAnyHeader();
            }));

            services.AddControllers();
        }
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseCors("MyPolicy");

__________________________________

Parte 7: https://naldog.blogspot.com/2019/10/docker-en-windows-parte-7-contenedor-de.html