SQL Server Linux-containers configureren en aanpassen
van toepassing op:SQL Server- - 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.
Tip
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-size
bij 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-latest
Met de optie
--shm-size
kunt 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.enablecontainersharedmemory
inschakelen inmssql.conf
in de container. U kuntmssql.conf
koppelen bij de implementatie van de container met behulp van de optie-v
zoals beschreven in de sectie Uw gegevens behouden of nadat u de container hebt geïmplementeerd door handmatigmssql.conf
in de container bij te werken. Hier volgt een voorbeeldbestandmssql.conf
met de instellingmemory.enablecontainersharedmemory
ingesteld 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 -a
uit 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 omgevingsvariabele TZ
(zie De tijdzone configureren voor SQL Server 2022 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
Voorzichtigheid
Uw wachtwoord moet voldoen aan het standaardbeleid voor SQL Server wachtwoordbeleid. 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'); GO
Controleer 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 sql1
docker stop sql1 docker start sql1
docker stop sql1 docker start sql1
Open een interactieve
bash
sessie om verbinding te maken met de container.docker exec -it sql1 bash
docker exec -it sql1 bash
docker exec -it sql1 bash
Nadat u verbinding hebt gemaakt met de interactieve shell, voert u de volgende opdracht uit om de locatie van
tempdb
te 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
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 exec
als hoofdgebruiker. Vervangsqlcontainer
door de containernaam.docker exec -u root -it sqlcontainer "bash"
Gebruik mssql-conf om een instelling te wijzigen. In dit voorbeeld wordt de instelling
memory.memorylimitmb
gewijzigd 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.
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
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.