Zum Inhalt springen

Aufgabe 2: Microsoft SQL Server

Du erstellst einen Microsoft SQL Server mit Docker Compose und verbindest dich mit einem Client.

  • Mindestens 2 GB RAM für den Container
  • Docker läuft auf einem 64-bit System

Erstelle eine neue Datei docker-compose.yml (oder erweitere die bestehende):

docker-compose.yml
services:
mssql:
image: mcr.microsoft.com/mssql/server:2022-latest
container_name: mssql-lab
restart: unless-stopped
environment:
ACCEPT_EULA: "Y"
MSSQL_SA_PASSWORD: "YourStrong@Passw0rd"
MSSQL_PID: "Developer"
ports:
- "1433:1433"
volumes:
- mssql_data:/var/opt/mssql
volumes:
mssql_data:
Terminal-Fenster
docker compose up -d

Prüfe ob der Container läuft:

Terminal-Fenster
docker compose ps
Terminal-Fenster
docker compose logs -f mssql

Warte bis du siehst:

SQL Server is now ready for client connections.

Drücke Ctrl+C um die Logs zu beenden.

Option A: Mit sqlcmd im Container

Terminal-Fenster
docker exec -it mssql-lab /opt/mssql-tools18/bin/sqlcmd \
-S localhost -U sa -P "YourStrong@Passw0rd" \
-C -Q "SELECT @@VERSION"

Option B: Mit Azure Data Studio (empfohlen)

  1. Download: Azure Data Studio
  2. Neue Verbindung erstellen:
    • Server: localhost,1433
    • Authentication: SQL Login
    • User: sa
    • Password: YourStrong@Passw0rd
    • Trust server certificate: Ja

Option C: Mit DBeaver

  1. Neue Verbindung → SQL Server
  2. Verbindungsdaten:
    • Host: localhost
    • Port: 1433
    • Database: master
    • User: sa
    • Password: YourStrong@Passw0rd

Verbinde dich und führe aus:

-- Neue Datenbank erstellen
CREATE DATABASE StudentDB;
GO
-- Zur neuen Datenbank wechseln
USE StudentDB;
GO
-- Tabelle erstellen
CREATE TABLE Courses (
CourseID INT IDENTITY(1,1) PRIMARY KEY,
CourseName NVARCHAR(100) NOT NULL,
Credits INT,
CreatedAt DATETIME DEFAULT GETDATE()
);
GO
-- Daten einfügen
INSERT INTO Courses (CourseName, Credits) VALUES
('Datenbanken', 5),
('IT Security', 4),
('Netzwerke', 4);
GO
-- Daten abfragen
SELECT * FROM Courses;
GO
SELECT name, create_date
FROM sys.databases
WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
GO
Terminal-Fenster
# Container stoppen
docker compose stop
# Container und Netzwerk entfernen (Daten bleiben)
docker compose down
# Alles inkl. Daten löschen
docker compose down -v

Du kannst MySQL und MSSQL in einer docker-compose.yml kombinieren:

docker-compose.yml
services:
mysql:
image: mysql:8.0
container_name: mysql-lab
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: testdb
MYSQL_USER: student
MYSQL_PASSWORD: studentpass
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
mssql:
image: mcr.microsoft.com/mssql/server:2022-latest
container_name: mssql-lab
restart: unless-stopped
environment:
ACCEPT_EULA: "Y"
MSSQL_SA_PASSWORD: "YourStrong@Passw0rd"
MSSQL_PID: "Developer"
ports:
- "1433:1433"
volumes:
- mssql_data:/var/opt/mssql
volumes:
mysql_data:
mssql_data:

Beide starten:

Terminal-Fenster
docker compose up -d
  1. Was ist der Unterschied zwischen der “Developer” und “Express” Edition von SQL Server?
  2. Warum muss man ACCEPT_EULA: "Y" setzen?
  3. Wie würdest du die Container-Logs überwachen, wenn ein Problem auftritt?
  4. Was sind die Vor- und Nachteile von containerisierten Datenbanken gegenüber nativen Installationen?

Auf Apple Silicon (M1/M2/M3):

services:
mssql:
image: mcr.microsoft.com/azure-sql-edge:latest
# ... rest bleibt gleich, aber MSSQL_PID entfernen

Azure SQL Edge ist eine leichtere Version, die auf ARM läuft.

Das Passwort erfüllt nicht die Anforderungen. Nutze ein stärkeres Passwort mit:

  • Mindestens 8 Zeichen
  • Gross- und Kleinbuchstaben
  • Ziffern
  • Sonderzeichen
Terminal-Fenster
docker compose logs mssql

Häufige Ursache: Zu wenig RAM. SQL Server benötigt min. 2 GB.

Du hast gelernt:

  • MySQL und MSSQL mit Docker Compose zu deployen
  • Dich mit verschiedenen Clients zu verbinden
  • Datenbanken und Tabellen zu erstellen
  • Container zu verwalten (start/stop/logs)

Zurück zur Lab-Übersicht →