Projeto exemplo em Microsoft ASP NET MVC, .net core 8 e ms-sql com docker e docker compose
Selecionar ao lado esquerdo o botão Create New Project.
Selecionar o template Asp.Net Core Web App (Model-View-Controller) MVC, Web
Após o projeto criado, crie um arquivo Cliente.cs
namespace Exemplo.Models
{
public class Cliente
{
public int Id { get; set; }
public string Nome { get; set; }
}
}Abrir o terminal e instalar os pacotes do Entity Framework
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore.ToolsCrie um arquivo ExemploContext.cs
Com o recurso do Copilot no Visual Studio Code, solicite a seguinte criação: "Criar arquivo de contexto entity framework"
Após a geração, este é o resultado:
using Microsoft.EntityFrameworkCore;
namespace Exemplo.Models
{
public class ExemploContext : DbContext
{
public ExemploContext(DbContextOptions<ExemploContext> options) : base(options){}
// Add DbSet properties for your entities here
public DbSet<Cliente> Clientes { get; set; }
}
}Crie o arquivo PrepDB.cs
Este arquivo será responsável por inserir alguns dados na tabela cliente para visualização.
using Microsoft.EntityFrameworkCore;
namespace Exemplo.Models
{
public class PrepDB
{
public static void PrepPopulation(IApplicationBuilder app)
{
using (var serviceScope = app.ApplicationServices.CreateScope())
{
var context = serviceScope.ServiceProvider.GetService<ExemploContext>();
if (context != null)
{
SeedData(context);
}
else
{
throw new Exception("Context is null");
}
}
}
private static void SeedData(ExemploContext context)
{
Console.WriteLine("Aplicando migrações...");
context.Database.Migrate();
if (!context.Clientes.Any())
{
Console.WriteLine("Adicionando dados de exemplo...");
context.Clientes.AddRange(
new Cliente { Nome = "Alice" },
new Cliente { Nome = "Bob" },
new Cliente { Nome = "Charlie" },
new Cliente { Nome = "David" },
new Cliente { Nome = "Eve" }
);
context.SaveChanges();
}
else
{
Console.WriteLine("Já existem dados de exemplo.");
}
}
}
}Após a criação, abra o arquivo Program.cs
Insira o código abaixo conforme a ilustração:
var server = builder.Configuration["DBServer"] ?? "ms-sql-server";
var port = builder.Configuration["DBPort"] ?? "1433";
var user = builder.Configuration["DBUser"] ?? "SA";
var password = builder.Configuration["DBPassword"] ?? "123@Mudar";
var database = builder.Configuration["Database"] ?? "Exemplo";
builder.Services.AddDbContext<ExemploContext>(options =>
options.UseSqlServer($"Server={server},{port};Initial Catalog={database};User ID={user};Password={password};Encrypt=False"));
...
PrepDB.PrepPopulation(app); Executar o migrations do entity framework:
dotnet ef migrations add ClienteModelCriar o arquivo Dockerfile
# Get Base Image (Full .NET Core SDK)
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-exemplo
WORKDIR /app
# Copy csproj and restore
COPY *.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o ./app/out
# Generate runtime image
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
EXPOSE 80
COPY --from=build-exemplo ./app/out .
ENTRYPOINT [ "dotnet","Exemplo.dll" ]

Criar o aquivo docker-compose.yml
version: '3'
services:
ms-sql-server:
image: mcr.microsoft.com/mssql/server:2019-latest
environment:
ACCEPT_EULA: "Y"
SA_PASSWORD: "123@Mudar"
MSSQL_PID: Express
ports:
- "1433:1433"
projeto-exemplo:
build: .
environment:
DBServer: "ms-sql-server"
ports:
- "80:8080"
Editar o arquivo Controllers/HomeController.cs
Incluir no construtor o parametro do contexto.
Passar no retorno da Index a lista de Clientes.
Editar o arquivo View/Home/Index.cshtml
Incluir o modelo da listagem de clientes.
Criar um laço do nome dos clientes.
Para testar se o código está correto, exute o seguinte comando no terminal
dotnet build
Caso não tenha problema de compilação, execute o docker para baixar a imagem do SQL Server para Linux:
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=123@Mudar' -e 'MSSQL_PID=Express' -p1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest
Quando executado o comando, o Docker vai baixar a imagem e iniciá-la, onde pode ser testada usando uma ferramenta de manipulação de SGBD do SQL, como SSMS ou Azure
Altere no arquivo Program.cs a configuração DBServer para localhost.
Para testar a aplicação localmente com e criando o banco SQL na imagem, rodamos o comando:
dotnet run
Como informado no log, o self-hosted executou na porta 5009 exibindo a lista de nomes do banco de dados.
Altere no arquivo Program.cs a configuração DBServer para ms-sql-server.
Crie o container da aplicação
docker build -t projeto-exemplo .
Execute o comando docker compose para executar iniciar o container
docker composse up
Agora teste a aplicação no navegador pela porta configurada no docker compose:

















