Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server op Linux
In dit artikel wordt uitgelegd hoe u SQL Server Linux-containers kunt configureren en aanpassen met behulp van Docker. U kunt uw gegevens behouden, bestanden van en naar containers verplaatsen en standaardinstellingen wijzigen.
Aanbeveling
U kunt sqlcmd (Go) gebruiken om een nieuw exemplaar van SQL Server in een container te maken voor ontwikkelingsdoeleinden. Zie Een SQL Server-container maken en er query's op uitvoerenvoor meer informatie.
Een aangepaste container maken
U kunt uw eigen Dockerfile- maken om een aangepaste SQL Server-container te maken. Zie een demo waarin SQL Server en een Node-toepassing worden gecombineerdvoor meer informatie. Als u uw eigen Dockerfile maakt, moet u rekening houden met het voorgrondproces, omdat dit proces de levensduur van de container regelt. Als het beëindigt, stopt de container. Als u bijvoorbeeld een script wilt uitvoeren en SQL Server wilt starten, moet u ervoor zorgen dat het SQL Server-proces de meest geschikte opdracht is. Alle andere opdrachten worden op de achtergrond uitgevoerd. De volgende opdracht illustreert dit in een Dockerfile:
/usr/src/app/do-my-sql-commands.sh & /opt/mssql/bin/sqlservr
Als u de opdrachten in het vorige voorbeeld hebt omgekeerd, wordt de container afgesloten wanneer het script do-my-sql-commands.sh is voltooid.
Uw gegevens behouden
Uw SQL Server-configuratiewijzigingen en databasebestanden blijven behouden in de container, zelfs als u de container opnieuw opstart met docker stop en docker start. Als u de container echter verwijdert met docker rm, wordt alles in de container verwijderd, inclusief SQL Server en uw databases. In de volgende sectie wordt uitgelegd hoe u gegevensvolumes gebruikt om uw databasebestanden te behouden, zelfs als de gekoppelde containers worden verwijderd.
Belangrijk
Voor SQL Server is het essentieel dat u inzicht krijgt in gegevenspersistentie in Docker. Naast de discussie in deze sectie raadpleegt u de documentatie van Docker over het beheren van gegevens in Docker-containers.
Een hostdirectory koppelen als gegevensvolume
De eerste optie is het koppelen van een map op uw host als een gegevensvolume in uw container. Gebruik hiervoor de opdracht docker run met de vlag -v <host directory>:/var/opt/mssql, waarbij <host directory> een bepaald pad is. Bijvoorbeeld: C:\SQL in Windows of ~/sqlvolumes op Linux. Hierdoor kunnen de gegevens worden hersteld tussen containeruitvoeringen.
Notitie
Containers voor SQL Server 2019 (15.x) en latere versies worden automatisch gestart als niet-hoofdmap, terwijl SQL Server 2017-containers (14.x) standaard als hoofdmap worden gestart. Zie Beveiligde SQL Server Linux-containersvoor meer informatie over het uitvoeren van SQL Server-containers als niet-hoofdcontainers.
Belangrijk
De omgevingsvariabele SA_PASSWORD is afgeschaft. Gebruik in plaats daarvan MSSQL_SA_PASSWORD.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 \
-v <host directory>/data:/var/opt/mssql/data \
-v <host directory>/log:/var/opt/mssql/log \
-v <host directory>/secrets:/var/opt/mssql/secrets \
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 `
-v <host directory>/data:/var/opt/mssql/data `
-v <host directory>/log:/var/opt/mssql/log `
-v <host directory>/secrets:/var/opt/mssql/secrets `
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 ^
-v <host directory>/data:/var/opt/mssql/data ^
-v <host directory>/log:/var/opt/mssql/log ^
-v <host directory>/secrets:/var/opt/mssql/secrets ^
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 \
-v <host directory>/data:/var/opt/mssql/data \
-v <host directory>/log:/var/opt/mssql/log \
-v <host directory>/secrets:/var/opt/mssql/secrets \
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 `
-v <host directory>/data:/var/opt/mssql/data `
-v <host directory>/log:/var/opt/mssql/log `
-v <host directory>/secrets:/var/opt/mssql/secrets `
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 ^
-v <host directory>/data:/var/opt/mssql/data ^
-v <host directory>/log:/var/opt/mssql/log ^
-v <host directory>/secrets:/var/opt/mssql/secrets ^
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 \
-v <host directory>/data:/var/opt/mssql/data \
-v <host directory>/log:/var/opt/mssql/log \
-v <host directory>/secrets:/var/opt/mssql/secrets \
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 `
-v <host directory>/data:/var/opt/mssql/data `
-v <host directory>/log:/var/opt/mssql/log `
-v <host directory>/secrets:/var/opt/mssql/secrets `
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 ^
-v <host directory>/data:/var/opt/mssql/data ^
-v <host directory>/log:/var/opt/mssql/log ^
-v <host directory>/secrets:/var/opt/mssql/secrets ^
-d mcr.microsoft.com/mssql/server:2022-latest
Voorzichtigheid
Uw wachtwoord moet voldoen aan het standaard -wachtwoordbeleid van SQL Server. Standaard moet het wachtwoord ten minste acht tekens lang zijn en tekens bevatten uit drie van de volgende vier sets: hoofdletters, kleine letters, basis-10 cijfers en symbolen. Wachtwoorden mogen maximaal 128 tekens lang zijn. Gebruik wachtwoorden die zo lang en complex mogelijk zijn.
Met deze techniek kunt u ook de bestanden op de host buiten Docker delen en weergeven.
Gegevensvolumecontainers gebruiken
De tweede optie is het gebruik van een gegevensvolumecontainer. U kunt een gegevensvolumecontainer maken door een volumenaam op te geven in plaats van een hostmap met de parameter -v. In het volgende voorbeeld wordt een gedeeld gegevensvolume gemaakt met de naam sqlvolume.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 \
-v sqlvolume:/var/opt/mssql \
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 `
-v sqlvolume:/var/opt/mssql `
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 ^
-v sqlvolume:/var/opt/mssql ^
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 \
-v sqlvolume:/var/opt/mssql \
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 `
-v sqlvolume:/var/opt/mssql `
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 ^
-v sqlvolume:/var/opt/mssql ^
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 \
-v sqlvolume:/var/opt/mssql \
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 `
-v sqlvolume:/var/opt/mssql `
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 ^
-v sqlvolume:/var/opt/mssql ^
-d mcr.microsoft.com/mssql/server:2022-latest
Voorzichtigheid
Uw wachtwoord moet voldoen aan het standaard -wachtwoordbeleid van SQL Server. Standaard moet het wachtwoord ten minste acht tekens lang zijn en tekens bevatten uit drie van de volgende vier sets: hoofdletters, kleine letters, basis-10 cijfers en symbolen. Wachtwoorden mogen maximaal 128 tekens lang zijn. Gebruik wachtwoorden die zo lang en complex mogelijk zijn.
Deze techniek voor het impliciet maken van een gegevensvolume in de run-opdracht werkt niet met oudere versies van Docker. Gebruik in dat geval de expliciete stappen die worden beschreven in de Docker-documentatie, Een gegevensvolumecontainer maken en koppelen.
Zelfs als u deze container stopt en verwijdert, blijft het gegevensvolume behouden. U kunt deze weergeven met de opdracht docker volume ls.
docker volume ls
Als u vervolgens een andere container met dezelfde volumenaam maakt, gebruikt de nieuwe container dezelfde SQL Server-gegevens in het volume.
Als u een gegevensvolumecontainer wilt verwijderen, gebruikt u de opdracht docker volume rm.
Waarschuwing
Als u de gegevensvolumecontainer verwijdert, worden sql Server-gegevens in de container permanent verwijderd.
Back-up en herstel
Naast deze containertechnieken kunt u ook standaard technieken voor back-ups en herstel van SQL Server gebruiken. U kunt back-upbestanden gebruiken om uw gegevens te beveiligen of om de gegevens naar een ander SQL Server-exemplaar te verplaatsen. Zie Back-up maken en herstellen van SQL Server-databases op Linuxvoor meer informatie.
Waarschuwing
Als u wel back-ups maakt, moet u de back-upbestanden buiten de container maken of kopiëren. Als de container wordt verwijderd, worden de back-upbestanden ook verwijderd.
VDI-back-up en herstel in containers inschakelen
Back-up- en herstelbewerkingen van VDI (Virtual Device Interface) worden nu ondersteund in SQL Server-containerimplementaties vanaf CU15 voor SQL Server 2019 (15.x) en CU28 voor SQL Server 2017 (14.x). Volg deze stappen om back-ups of herstelbewerkingen op basis van VDI in te schakelen voor SQL Server-containers:
Gebruik de optie
--shm-sizebij het implementeren van SQL Server-containers. Als u wilt beginnen, stelt u de grootte in op 1 GB, zoals wordt weergegeven in de volgende opdracht. Vervang<password>door een geldig wachtwoord.docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" \ --shm-size 1g \ -p 1433:1433 \ --name sql19 \ --hostname sql19 \ -d mcr.microsoft.com/mssql/server:2019-latestMet de optie
--shm-sizekunt u de grootte van de map met gedeeld geheugen (/dev/shm) in de container configureren, die standaard is ingesteld op 64 MB. Deze standaardgrootte van het gedeelde geheugen is onvoldoende om VDI-back-ups te ondersteunen. U wordt aangeraden dit te configureren tot minimaal 1 GB wanneer u SQL Server-containers implementeert en VDI-back-ups wilt ondersteunen.U moet ook de nieuwe parameter
memory.enablecontainersharedmemoryinschakelen inmssql.confin de container. U kuntmssql.confkoppelen bij de implementatie van de container met behulp van de optie-vzoals beschreven in de sectie Uw gegevens behouden of nadat u de container hebt geïmplementeerd door handmatigmssql.confin de container bij te werken. Hier volgt een voorbeeldbestandmssql.confmet de instellingmemory.enablecontainersharedmemoryingesteld optrue.[memory] enablecontainersharedmemory = true
Bestanden kopiëren uit een container
Gebruik de volgende opdracht om een bestand uit de container te kopiëren:
docker cp <Container ID>:<Container path> <host path>
U kunt de container-id ophalen door de opdracht docker ps -auit te voeren.
voorbeeld:
docker cp d6b75213ef80:/var/opt/mssql/log/errorlog /tmp/errorlog
docker cp d6b75213ef80:/var/opt/mssql/log/errorlog C:\Temp\errorlog
docker cp d6b75213ef80:/var/opt/mssql/log/errorlog C:\Temp\errorlog
Bestanden kopiëren naar een container
Gebruik de volgende opdracht om een bestand naar de container te kopiëren:
docker cp <Host path> <Container ID>:<Container path>
voorbeeld:
docker cp /tmp/mydb.mdf d6b75213ef80:/var/opt/mssql/data
docker cp C:\Temp\mydb.mdf d6b75213ef80:/var/opt/mssql/data
docker cp C:\Temp\mydb.mdf d6b75213ef80:/var/opt/mssql/data
De tijdzone configureren
Als u SQL Server wilt uitvoeren in een Linux-container met een specifieke tijdzone, configureert u de TZ omgevingsvariabele (zie De tijdzone configureren voor SQL Server 2022 en latere versies op Linux voor meer informatie). Als u de juiste tijdzonewaarde wilt vinden, voert u de opdracht tzselect uit vanaf een Linux-bash-prompt:
tzselect
Nadat u de tijdzone hebt geselecteerd, geeft tzselect uitvoer weer die vergelijkbaar is met het volgende voorbeeld:
The following information has been given:
United States
Pacific
Therefore TZ='America/Los_Angeles' will be used.
U kunt deze informatie gebruiken om dezelfde omgevingsvariabele in te stellen in uw Linux-container. In het volgende voorbeeld ziet u hoe u SQL Server uitvoert in een container in de Americas/Los_Angeles tijdzone:
sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 --name sql1 \
-e 'TZ=America/Los_Angeles' \
-d mcr.microsoft.com/mssql/server:2017-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 --name sql1 `
-e "TZ=America/Los_Angeles" `
-d mcr.microsoft.com/mssql/server:2017-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 --name sql1 ^
-e "TZ=America/Los_Angeles" ^
-d mcr.microsoft.com/mssql/server:2017-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 --name sql1 \
-e 'TZ=America/Los_Angeles' \
-d mcr.microsoft.com/mssql/server:2019-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 --name sql1 `
-e "TZ=America/Los_Angeles" `
-d mcr.microsoft.com/mssql/server:2019-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 --name sql1 `
-e "TZ=America/Los_Angeles" `
-d mcr.microsoft.com/mssql/server:2019-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 --name sql1 \
-e 'TZ=America/Los_Angeles' \
-d mcr.microsoft.com/mssql/server:2022-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 --name sql1 `
-e "TZ=America/Los_Angeles" `
-d mcr.microsoft.com/mssql/server:2022-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 --name sql1 ^
-e "TZ=America/Los_Angeles" ^
-d mcr.microsoft.com/mssql/server:2022-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 --name sql1 \
-e 'TZ=America/Los_Angeles' \
-d mcr.microsoft.com/mssql/server:2025-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 --name sql1 `
-e "TZ=America/Los_Angeles" `
-d mcr.microsoft.com/mssql/server:2025-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 --name sql1 ^
-e "TZ=America/Los_Angeles" ^
-d mcr.microsoft.com/mssql/server:2025-latest
Voorzichtigheid
Uw wachtwoord moet voldoen aan het standaard -wachtwoordbeleid van SQL Server. Standaard moet het wachtwoord ten minste acht tekens lang zijn en tekens bevatten uit drie van de volgende vier sets: hoofdletters, kleine letters, basis-10 cijfers en symbolen. Wachtwoorden mogen maximaal 128 tekens lang zijn. Gebruik wachtwoorden die zo lang en complex mogelijk zijn.
Het pad tempdb wijzigen
Het is een goede gewoonte om uw tempdb database gescheiden te houden van uw gebruikersdatabases.
Maak verbinding met het SQL Server-exemplaar en voer vervolgens het volgende Transact-SQL (T-SQL)-script uit. Als er meer bestanden zijn gekoppeld aan
tempdb, moet u ze ook verplaatsen.ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = '/var/opt/mssql/tempdb/tempdb.mdf'); GO ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = '/var/opt/mssql/tempdb/templog.ldf'); GOControleer of de locatie van het
tempdb-bestand is gewijzigd met behulp van het volgende T-SQL-script:SELECT * FROM sys.sysaltfiles WHERE dbid = 2;U moet de SQL Server-container opnieuw starten om deze wijzigingen van kracht te laten worden.
docker stop sql1 docker start sql1docker stop sql1 docker start sql1docker stop sql1 docker start sql1Open een interactieve
bashsessie om verbinding te maken met de container.docker exec -it sql1 bashdocker exec -it sql1 bashdocker exec -it sql1 bashNadat u verbinding hebt gemaakt met de interactieve shell, voert u de volgende opdracht uit om de locatie van
tempdbte controleren:ls /var/opt/mssql/tempdb/Als de verplaatsing is geslaagd, ziet u vergelijkbare uitvoer:
tempdb.mdf templog.ldf
De standaardbestandslocatie wijzigen
Voeg de MSSQL_DATA_DIR variabele toe om uw gegevensmap te wijzigen in de opdracht docker run en koppel vervolgens een volume aan die locatie waartoe de gebruiker van uw container toegang heeft.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-e 'MSSQL_DATA_DIR=/my/file/path' \
-v /my/host/path:/my/file/path \
-p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-e "MSSQL_DATA_DIR=/my/file/path" `
-v /my/host/path:/my/file/path `
-p 1433:1433 `
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-e "MSSQL_DATA_DIR=/my/file/path" ^
-v /my/host/path:/my/file/path ^
-p 1433:1433 ^
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-e 'MSSQL_DATA_DIR=/my/file/path' \
-v /my/host/path:/my/file/path \
-p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-e "MSSQL_DATA_DIR=/my/file/path" `
-v /my/host/path:/my/file/path `
-p 1433:1433 `
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-e "MSSQL_DATA_DIR=/my/file/path" ^
-v /my/host/path:/my/file/path ^
-p 1433:1433 ^
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-e 'MSSQL_DATA_DIR=/my/file/path' \
-v /my/host/path:/my/file/path \
-p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-e "MSSQL_DATA_DIR=/my/file/path" `
-v /my/host/path:/my/file/path `
-p 1433:1433 `
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-e "MSSQL_DATA_DIR=/my/file/path" ^
-v /my/host/path:/my/file/path ^
-p 1433:1433 ^
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-e 'MSSQL_DATA_DIR=/my/file/path' \
-v /my/host/path:/my/file/path \
-p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2025-latest
docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-e "MSSQL_DATA_DIR=/my/file/path" `
-v /my/host/path:/my/file/path `
-p 1433:1433 `
-d mcr.microsoft.com/mssql/server:2025-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-e "MSSQL_DATA_DIR=/my/file/path" ^
-v /my/host/path:/my/file/path ^
-p 1433:1433 ^
-d mcr.microsoft.com/mssql/server:2025-latest
Mssql-config gebruiken om SQL Server in een container te configureren
U kunt het hulpprogramma mssql-conf gebruiken om parameters in SQL Server-containers in te stellen.
U kunt bijvoorbeeld een geheugenlimiet voor het exemplaar instellen met behulp van de volgende stappen:
Maak rechtstreeks verbinding met de container met behulp van
docker execals hoofdgebruiker. Vervangsqlcontainerdoor de containernaam.docker exec -u root -it sqlcontainer "bash"Gebruik mssql-conf om een instelling te wijzigen. In dit voorbeeld wordt de instelling
memory.memorylimitmbgewijzigd in 2 GB (2048 MB)./opt/mssql/bin/mssql-conf set memory.memorylimitmb 2048
Voorbeelden van aangepaste Docker-containers
Zie https://github.com/microsoft/mssql-docker/tree/master/linux/preview/examplesvoor voorbeelden van aangepaste Docker-containers. De voorbeelden zijn:
- Dockerfile-voorbeeld met Full-Text Search-
- Dockerfile-voorbeeld voor RHEL 7 en SQL Server 2019
- Dockerfile-voorbeeld voor RHEL 8 en SQL Server 2017
- Dockerfile-voorbeeld voor Ubuntu 20.04 en SQL Server 2019 met Full-Text Search, PolyBase en Tools
Zie de ML Services-voorbeelden op GitHub voor meer informatie over het bouwen en uitvoeren van Docker-containers met behulp van Dockerfiles.
Ondersteuning voor controlegroep (cgroup) v2
SQL Server detecteert en voldoet aan beperkingen voor de controlegroep (cgroup) v2, te beginnen met SQL Server 2025 (17.x) en SQL Server 2022 (16.x) Cumulatieve update (CU) 20. Deze beperkingen bieden nauwkeurige controle in de Linux-kernel over CPU- en geheugenresources en verbeteren resource-isolatie in Docker-, Kubernetes- en OpenShift-omgevingen.
In eerdere versies kunnen in containers geplaatste implementaties op Kubernetes-clusters (bijvoorbeeld Azure Kubernetes Service v1.25+) fouten met onvoldoende geheugen (OOM) ondervinden omdat SQL Server geen geheugenlimieten heeft afgedwongen die zijn gedefinieerd in containerspecificaties. Ondersteuning voor cgroup v2 lost dit probleem op.
CGroup-versie controleren
stat -fc %T /sys/fs/cgroup
De resultaten zijn als volgt:
| Resultaat | Description |
|---|---|
cgroup2fs |
U gebruikt cgroup v2 |
cgroup |
U gebruikt cgroup v1 |
Overschakelen naar cgroup v2
Het eenvoudigste pad is het kiezen van een distributie die ondersteuning biedt voor cgroup v2.
Als u handmatig moet overschakelen, voegt u de volgende parameter toe aan uw GRUB-configuratie:
systemd.unified_cgroup_hierarchy=1
Werk GRUB vervolgens bij. Voer bijvoorbeeld in Ubuntu het volgende uit:
sudo update-grub
Voer op Red Hat Enterprise Linux (RHEL) de volgende opdracht uit:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
CPU-limietrapportage met cgroup v2
Wanneer u CPU-limieten configureert met cgroup v2, wordt SQL Server het geconfigureerde aantal CPU-kernen niet weergegeven in het foutenlogboek. In plaats daarvan blijft het systeem het totale aantal host-CPU's rapporteren.
Als u SQL Server scheduler en queryplannen wilt uitlijnen (bijvoorbeeld beslissingen voor parallelle uitvoering) met het beoogde CPU-aantal dat is gedefinieerd in cgroup v2, past u de volgende configuratie toe.
Processoraffiniteit configureren
Stel expliciet SQL Server processoraffiniteit in zodat deze overeenkomt met het quotum voor cgroup-uitvoering. In het volgende voorbeeld is het cgroupquotum vier CPU's op een host met acht kernen:
ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY CPU = 0 TO 3;
Deze configuratie zorgt ervoor dat SQL Server alleen schedulers maakt voor het beoogde aantal CPU's. Zie ALTER SERVER CONFIGURATION en Gebruik PROCESAFFINITEIT voor knooppunt(en) en/of CPU's voor meer informatie.
Traceringsvlag 8002 inschakelen (aanbevolen)
Schakel traceringsvlag 8002 in om zachte affiniteit te gebruiken op de SQLPAL-laag:
sudo /opt/mssql/bin/mssql-conf traceflag 8002 on
Schedulers zijn standaard gebonden aan specifieke CPU's die zijn gedefinieerd in het affiniteitsmasker. Traceringsvlag 8002 maakt het mogelijk dat schedulers over CPU's heen worden verplaatst, wat over het algemeen de prestaties verbetert, terwijl affiniteit- en cgroup-beperkingen worden gerespecteerd. Zie DBCC TRACEON - Trace flagsvoor meer informatie.
Start SQL Server opnieuw nadat u de traceringsvlag hebt ingeschakeld.
Verwacht gedrag
Na opnieuw opstarten:
SQL Server maakt alleen het aantal planners dat is gedefinieerd door de affiniteitsinstelling (bijvoorbeeld vier planners).
De Linux-kernel blijft het quotum voor cpu-uitvoering van cgroup v2 afdwingen.
Beslissingen over queryoptimalisatie en parallelle uitvoering zijn gebaseerd op het beoogde CPU-aantal, in plaats van de totale host-CPU's.
Notitie
Het SQL Server foutenlogboek kan het totaalaantal CPU's van de host blijven weergeven. Dit logboekregistratie- en weergavegedrag heeft geen invloed op het werkelijke CPU-gebruik, het aanmaken van de scheduler, CPU-beperking door cgroup v2, of processoraffiniteit.
Zie de volgende bronnen voor meer informatie:
- Quickstart: Een SQL Server Linux-container implementeren in Kubernetes met behulp van Helm-grafieken
- Control Group v2 (Linux-kerneldocumentatie)
Verwante inhoud
- Ga aan de slag met containerafbeeldingen van SQL Server 2017 (14.x) in Docker met behulp van de quickstart
- Ga aan de slag met containerinstallatiekopieën van SQL Server 2019 (15.x) in Docker door de quickstart te doorlopen
- Ga aan de slag met containerinstallatiekopieën van SQL Server 2022 (16.x) in Docker door de quickstart te doorlopen
- Aan de slag met containerinstallatiekopieën van SQL Server 2025 (17.x) in Docker door de quickstart te doorlopen
Bijdragen aan SQL-documentatie
Wist u dat u zelf SQL-inhoud kunt bewerken? Als u dit doet, helpt u niet alleen onze documentatie te verbeteren, maar wordt u ook erkend als bijdrager aan de pagina.
Zie Microsoft Learn-documentatie bewerkenvoor meer informatie.