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
| Funktion | LocalDB | SQL Server Docker |
|---|---|---|
| Platform | Endast Windows | Windows/Mac/Linux |
| Installation | Enkel | Kräver Docker |
| Minnesanvändning | Låg | Högre |
| Features | Begränsade | Fullständiga |
| Produktion-lik | Nej | Ja |
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:
| Parameter | Förklaring |
|---|---|
ACCEPT_EULA | Måste vara “Y” för att acceptera licensavtal |
SA_PASSWORD | Lösenord för sa (system administrator) |
MSSQL_PID | Edition: Developer (gratis för utveckling) |
ports | Exponerar port 1433 (SQL Server standard) |
volumes | Persistent lagring (överlever container-omstart) |
2.3 Anslut från SSMS eller C#
Från SSMS:
- Öppna SSMS
- Server name:
localhost,1433(notera komma!) - Authentication: SQL Server Authentication
- Login:
sa - 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
| Vad | Hur |
|---|---|
| Installera | Docker + docker-compose.yml |
| Starta | docker-compose up -d |
| Anslutning | localhost,1433 med sa-användare |
| Connection string | Server=localhost,1433;User Id=sa;Password=...;TrustServerCertificate=true; |
| CRUD | Samma som LocalDB (EF Core) |
| Backup | docker exec + sqlcmd |
| Persistent data | Volumes 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!