Kapitel 4 – SQL Server i Docker (Avancerat tillval)

1. Vad är SQL Server i containerform?

Detta kapitel är för dig som vill köra full SQL Server i en Docker-container istället för LocalDB. Detta är användbart när:

  • Du vill ha en produktionsliknande miljö lokalt
  • Du utvecklar i team och vill ha samma setup
  • Du kör Linux eller Mac (LocalDB finns bara på Windows)
  • Du vill lära dig Docker + SQL Server för senare molndistribution

SQL Server i Docker vs LocalDB

FunktionLocalDBSQL Server Docker
PlatformEndast WindowsWindows/Mac/Linux
InstallationEnkelKräver Docker
MinnesanvändningLågHögre
FeaturesBegränsadeFullständiga
Produktion-likNejJa

2. Installation av verktyg och Docker

2.1 Docker-setup för SQL Server

Skapa en fil docker-compose.yml:

version: '3.8'

services:
  sqlserver:
    image: mcr.microsoft.com/mssql/server:2022-latest
    container_name: sqlserver_dev
    environment:
      ACCEPT_EULA: "Y"
      SA_PASSWORD: "YourStrong!Passw0rd"
      MSSQL_PID: "Developer"
    ports:
      - "1433:1433"
    volumes:
      - sqlserver_data:/var/opt/mssql

volumes:
  sqlserver_data:

Viktigt om lösenordet:

  • Minst 8 tecken
  • Innehålla stora och små bokstäver
  • Innehålla siffror
  • Innehålla specialtecken

Starta containern:

docker-compose up -d

Vänta 15-20 sekunder för att SQL Server ska starta helt.

2.2 Portar, miljövariabler och volymer

Förklaring av docker-compose.yml:

ParameterFörklaring
ACCEPT_EULAMåste vara “Y” för att acceptera licensavtal
SA_PASSWORDLösenord för sa (system administrator)
MSSQL_PIDEdition: Developer (gratis för utveckling)
portsExponerar port 1433 (SQL Server standard)
volumesPersistent lagring (överlever container-omstart)

2.3 Anslut från SSMS eller C#

Från SSMS:

  1. Öppna SSMS
  2. Server name: localhost,1433 (notera komma!)
  3. Authentication: SQL Server Authentication
  4. Login: sa
  5. Password: YourStrong!Passw0rd

Från C#:

string connectionString = "Server=localhost,1433;Database=MyApp;User Id=sa;Password=YourStrong!Passw0rd;TrustServerCertificate=true;";

Viktigt: TrustServerCertificate=true behövs för lokala utvecklingsmiljöer.


3. Entity Framework Core mot container

Connection string i DbContext

using Microsoft.EntityFrameworkCore;

public class AppDbContext : DbContext
{
    public DbSet<Customer> Customers { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(
            "Server=localhost,1433;Database=MyApp;User Id=sa;Password=YourStrong!Passw0rd;TrustServerCertificate=true;"
        );
    }
}

Skapa databasen

Kör migrations som vanligt:

dotnet ef migrations add InitialCreate
dotnet ef database update

EF Core skapar databasen MyApp i containern!


4. CRUD-exempel (återanvändbar kod)

Koden är identisk med LocalDB-exemplen från kapitel 3!

// CREATE
using (var context = new AppDbContext())
{
    context.Customers.Add(new Customer
    {
        Name = "Test User",
        Email = "test@example.com"
    });
    context.SaveChanges();
}

// READ
using (var context = new AppDbContext())
{
    var customers = context.Customers.ToList();
    foreach (var c in customers)
    {
        Console.WriteLine($"{c.Name} - {c.Email}");
    }
}

// UPDATE
using (var context = new AppDbContext())
{
    var customer = context.Customers.Find(1);
    if (customer != null)
    {
        customer.Phone = "0701234567";
        context.SaveChanges();
    }
}

// DELETE
using (var context = new AppDbContext())
{
    var customer = context.Customers.Find(1);
    if (customer != null)
    {
        context.Customers.Remove(customer);
        context.SaveChanges();
    }
}

5. Backup och volymer

Backup via Docker exec

docker exec -it sqlserver_dev /opt/mssql-tools/bin/sqlcmd \
  -S localhost -U sa -P 'YourStrong!Passw0rd' \
  -Q "BACKUP DATABASE MyApp TO DISK='/var/opt/mssql/backup/MyApp.bak'"

Kopiera backup från container till host

docker cp sqlserver_dev:/var/opt/mssql/backup/MyApp.bak ./MyApp_backup.bak

Återställ backup

docker exec -it sqlserver_dev /opt/mssql-tools/bin/sqlcmd \
  -S localhost -U sa -P 'YourStrong!Passw0rd' \
  -Q "RESTORE DATABASE MyApp FROM DISK='/var/opt/mssql/backup/MyApp.bak' WITH REPLACE"

Persistent data med volymer

Tack vare volumes i docker-compose.yml sparas all data även om du tar bort containern:

# Stoppa och ta bort container
docker-compose down

# Starta igen - data finns kvar!
docker-compose up -d

Ta bort volymer (VARNING: raderar all data!):

docker-compose down -v

6. TL;DR – Snabböversikt

VadHur
InstalleraDocker + docker-compose.yml
Startadocker-compose up -d
Anslutninglocalhost,1433 med sa-användare
Connection stringServer=localhost,1433;User Id=sa;Password=...;TrustServerCertificate=true;
CRUDSamma som LocalDB (EF Core)
Backupdocker exec + sqlcmd
Persistent dataVolumes i docker-compose.yml

7. Sammanfattning

Du har nu lärt dig: ✅ Köra SQL Server i Docker ✅ Konfigurera portar och volymer ✅ Ansluta från SSMS och C# ✅ Använda EF Core mot containeriserad SQL Server ✅ Ta backup och återställa data ✅ Hantera persistent lagring

Nästa steg: Kapitel 5 – MongoDB, där vi lämnar SQL-världen och går in i NoSQL!


Upp

Upp


Licens: Apache 2.0 | © 2023 Marcus Medina, Campus Mölndal. Alla rättigheter förbehållna.
Du får använda och modifiera detta verk enligt villkoren i Apache License, Version 2.0. Du får inte använda detta verk för kommersiella ändamål utan tillstånd från upphovsmannen.