79159849

Date: 2024-11-05 16:08:19
Score: 4.5
Natty:
Report link

Ola, fiz um projeto que faz exatamente isso, coloquei no meu github pode dar uma olhada. https://github.com/LeonardoQueres/Integration-Docker---.NET---SQL-SERVER

No arquivo program.cs adicione a linha de codigo abaixo

builder.Services.AddHttpsRedirection(options =>
{
    options.RedirectStatusCode = Status308PermanentRedirect;
    options.HttpsPort = 3001;
});

enter image description here

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();

    var application = app.Services.CreateScope().ServiceProvider.GetRequiredService<ApplicationDbContext>();

    // Utilizando o migration a execução do container docker não é necessario as linhas abaixo
    var pendingMigrations = await application.Database.GetPendingMigrationsAsync();
    if (pendingMigrations != null)
        await application.Database.MigrateAsync();
}

enter image description here

Atualize seu arquivo dockerfile confirme codigo abaixo adicionando as linhas do migration

# Esta fase é usada durante a execução no VS no modo rápido (Padrão para a configuração de Depuração)
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER app
WORKDIR /app
EXPOSE 3000
EXPOSE 3001


# Esta fase é usada para compilar o projeto de serviço
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["project/project.csproj", "project/"]
COPY ["Thunders_Repositories/Thunders_Repositories.csproj", "Thunders_Repositories/"]
COPY ["Thunders_Borders/Thunders_Borders.csproj", "Thunders_Borders/"]
COPY ["Thunders_UseCases/Thunders_UseCases.csproj", "Thunders_UseCases/"]
RUN dotnet restore "./project/project.csproj"
COPY . .
WORKDIR "/src/project"
RUN dotnet tool install --global dotnet-ef 
ENV PATH="$PATH:/root/.dotnet/tools"
RUN dotnet build "./project.csproj" -c $BUILD_CONFIGURATION -o /app/build
CMD dotnet ef database update --environment Development --project src/project_Repositories

# Esta fase é usada para publicar o projeto de serviço a ser copiado para a fase final
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./project.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

# Esta fase é usada na produção ou quando executada no VS no modo normal (padrão quando não está usando a configuração de Depuração)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "project.dll"]

O codigo abaixo pertence ao docker-compose, atualize o seu conforme necessidade.

services:
  project:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_HTTP_PORTS=3000
      - ASPNETCORE_HTTPS_PORTS=3001
    container_name: project
    image: ${DOCKER_REGISTRY-}project
    build:
      context: .
      dockerfile: project/Dockerfile   
    ports:
      - "3000:3000"
      - "3001:3001"
    volumes:
      - ${APPDATA}/Microsoft/UserSecrets:/home/app/.microsoft/usersecrets:ro
      - ${APPDATA}/ASP.NET/Https:/home/app/.aspnet/https:ro
    networks:
      - compose-bridge
    depends_on:
      sqlserver:
        condition: service_healthy

  sqlserver:
    image: mcr.microsoft.com/mssql/server:2022-preview-ubuntu-22.04
    container_name: sqlserver    
    ports:
      - "1433:1433"
    environment:
      - SA_PASSWORD=passwork 'não pode ser uma senha fraca, sql nao funciona. nada de usar 123456 hehehehe'
      - ACCEPT_EULA= Y       
    volumes:
      - ./sqlserver/data:/var/opt/mssql/data
      - ./sqlserver/log:/var/opt/mssql/log   
    networks:
      - compose-bridge 
    healthcheck:
      test: /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "leoQueres123" -Q "SELECT 1" -b -o /dev/null
      interval: 10s
      timeout: 3s
      retries: 10
      start_period: 10s  

volumes: 
  sqlserver:

networks:
  compose-bridge:
    driver: bridge
  

Espero ter ajudado.

Reasons:
  • Blacklisted phrase (2): Espero
  • Blacklisted phrase (1): enter image description here
  • Blacklisted phrase (1): está
  • Blacklisted phrase (1): não
  • Long answer (-1):
  • Has code block (-0.5):
  • Low reputation (1):
Posted by: Leonardo Queres