Konfigurera och anpassa SQL Server Linux-containrar
gäller för:SQL Server – Linux
Den här artikeln beskriver hur du kan konfigurera och anpassa SQL Server Linux-containrar med Docker. Du kan spara dina data, flytta filer från och till containrar och ändra standardinställningarna.
Tips
Du kan använda sqlcmd (Go) för att skapa en ny instans av SQL Server i en container i utvecklingssyfte. Mer information finns i Skapa och gör en frågeställning kring en SQL Server-container.
Skapa en anpassad container
Du kan skapa en egen Dockerfile för att skapa en anpassad SQL Server-container. Mer information finns i en demo som kombinerar SQL Server och ett Node-program. Om du skapar en egen Dockerfile bör du vara medveten om förgrundsprocessen eftersom den här processen styr containerns livslängd. Om det avslutas, stängs containern ner. Om du till exempel vill köra ett skript och starta SQL Server, bör du kontrollera att SQL Server-processen är det längst till höger i kommandokedjan. Alla andra kommandon körs i bakgrunden. Följande kommando illustrerar detta i en Dockerfile:
/usr/src/app/do-my-sql-commands.sh & /opt/mssql/bin/sqlservr
Om du ångrade kommandona i föregående exempel skulle containern stängas av när skriptet do-my-sql-commands.sh har slutförts.
Spara dina data
Dina SQL Server-konfigurationsändringar och databasfiler sparas i containern även om du startar om containern med docker stop
och docker start
. Men om du tar bort containern med docker rm
tas allt i containern bort, inklusive SQL Server och dina databaser. I följande avsnitt beskrivs hur du använder datavolymer för att spara databasfilerna även om de associerade containrarna tas bort.
Viktig
För SQL Server är det viktigt att du förstår datapersistence i Docker. Förutom diskussionen i det här avsnittet kan du läsa Dockers dokumentation om hur du hanterar data i Docker-containrar.
Montera en värdkatalog som datavolym
Ett första alternativ är att montera en katalog som en datavolym på din värd i containern. Det gör du genom att använda kommandot docker run
med flaggan -v <host directory>:/var/opt/mssql
, där <host directory>
är en viss sökväg. Till exempel: C:\SQL
i Windows eller ~/sqlvolumes
på Linux. Detta gör att data kan återställas mellan containerkörningar.
Anteckning
Containrar för SQL Server 2019 (15.x) och senare versioner startas automatiskt som icke-rot, medan SQL Server 2017-containrar (14.x) startas som rot som standard. För mer information om hur du kör SQL Server-containrar som icke-root, se Secure SQL Server Linux-containrar.
Viktig
Miljövariabeln SA_PASSWORD
är inaktuell. Använd MSSQL_SA_PASSWORD
i stället.
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
Försiktighet
Lösenordet bör följa SQL Server-standardprincipen för lösenord. Lösenordet måste som standard vara minst åtta tecken långt och innehålla tecken från tre av följande fyra uppsättningar: versaler, gemener, bas-10 siffror och symboler. Lösenord kan vara upp till 128 tecken långa. Använd lösenord som är så långa och komplexa som möjligt.
Med den här tekniken kan du också dela och komma åt filerna på värddatorn utanför Docker.
Använda datavolymcontainrar
Det andra alternativet är att använda en datavolymcontainer. Du kan skapa en datavolymcontainer genom att ange ett volymnamn i stället för en värdkatalog med parametern -v
. I följande exempel skapas en delad datavolym med namnet 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
Försiktighet
Lösenordet bör följa SQL Server-standardprincipen för lösenord. Lösenordet måste som standard vara minst åtta tecken långt och innehålla tecken från tre av följande fyra uppsättningar: versaler, gemener, bas-10 siffror och symboler. Lösenord kan vara upp till 128 tecken långa. Använd lösenord som är så långa och komplexa som möjligt.
Den här tekniken för att implicit skapa en datavolym i körningskommandot fungerar inte med äldre versioner av Docker. I så fall använder du de explicita stegen som beskrivs i Docker-dokumentationen, Skapa och montera en datavolymcontainer.
Även om du stoppar och tar bort den här containern bevaras datavolymen. Du kan visa den med kommandot docker volume ls
.
docker volume ls
Om du sedan skapar en annan container med samma volymnamn använder den nya containern samma SQL Server-data som finns i volymen.
Om du vill ta bort en datavolymcontainer använder du kommandot docker volume rm
.
Varning
Om du tar bort datavolymcontainern tas alla SQL Server-data i containern permanent bort.
Säkerhetskopiering och återställning
Utöver dessa containertekniker kan du även använda standardtekniker för säkerhetskopiering och återställning av SQL Server. Du kan använda säkerhetskopieringsfiler för att skydda dina data eller för att flytta data till en annan SQL Server-instans. Mer information finns i Säkerhetskopiera och återställa SQL Server-databaser i Linux.
Varning
Om du skapar säkerhetskopior måste du skapa eller kopiera säkerhetskopieringsfilerna utanför containern. Annars tas även säkerhetskopieringsfilerna bort om containern tas bort.
Aktivera VDI-säkerhetskopiering och återställning i containrar
Säkerhetskopierings- och återställningsåtgärder för virtuellt enhetsgränssnitt (VDI) stöds nu i SQL Server-containerdistributioner som börjar med CU15 för SQL Server 2019 (15.x) och CU28 för SQL Server 2017 (14.x). Följ dessa steg för att aktivera VDI-baserad säkerhetskopiering eller återställning för SQL Server-containrar:
När du distribuerar SQL Server-containrar använder du alternativet
--shm-size
. Börja genom att ange storleksändringen till 1 GB, enligt följande kommando. Ersätt<password>
med ett giltigt lösenord.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
Med alternativet
--shm-size
kan du konfigurera storleken på den delade minneskatalogen (/dev/shm
) i containern, som är inställd på 64 MB som standard. Den här standardstorleken för det delade minnet är otillräcklig för att stödja VDI-säkerhetskopior. Vi rekommenderar att du konfigurerar detta till minst 1 GB när du distribuerar SQL Server-containrar och vill ha stöd för VDI-säkerhetskopior.Du måste också aktivera den nya parametern
memory.enablecontainersharedmemory
imssql.conf
inuti containern. Du kan monteramssql.conf
vid distributionen av containern med hjälp av alternativet-v
enligt beskrivningen i avsnittet Spara dina data eller när du har distribuerat containern genom att uppdateramssql.conf
inuti containern manuellt. Här är ett exempel på enmssql.conf
fil med inställningenmemory.enablecontainersharedmemory
inställd påtrue
.[memory] enablecontainersharedmemory = true
Kopiera filer från en container
Om du vill kopiera en fil från containern använder du följande kommando:
docker cp <Container ID>:<Container path> <host path>
Du kan hämta container-ID:t genom att köra kommandot docker ps -a
.
Exempel:
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
Kopiera filer till en container
Om du vill kopiera en fil till containern använder du följande kommando:
docker cp <Host path> <Container ID>:<Container path>
Exempel:
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
Konfigurera tidszonen
Om du vill köra SQL Server i en Linux-container med en specifik tidszon konfigurerar du TZ
miljövariabeln (se Konfigurera tidszonen för SQL Server 2022 på Linux för mer information). Om du vill hitta rätt tidszonsvärde kör du kommandot tzselect
från en Bash-prompt i Linux:
tzselect
När du har valt tidszonen visar tzselect
utdata som liknar följande exempel:
The following information has been given:
United States
Pacific
Therefore TZ='America/Los_Angeles' will be used.
Du kan använda den här informationen för att ange samma miljövariabel i Linux-containern. I följande exempel visas hur du kör SQL Server i en container i Americas/Los_Angeles
tidszon:
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
Försiktighet
Lösenordet bör följa SQL Server-standardprincipen för lösenord. Lösenordet måste som standard vara minst åtta tecken långt och innehålla tecken från tre av följande fyra uppsättningar: versaler, gemener, bas-10 siffror och symboler. Lösenord kan vara upp till 128 tecken långa. Använd lösenord som är så långa och komplexa som möjligt.
Ändra tempdb
-sökvägen
Det är en bra idé att hålla din tempdb
databas åtskild från dina användardatabaser.
Anslut till SQL Server-instansen och kör sedan följande Transact-SQL -skript (T-SQL). Om det finns fler filer som är associerade med
tempdb
måste du också flytta dem.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
Kontrollera att
tempdb
filplatsen har ändrats med hjälp av följande T-SQL-skript:SELECT * FROM sys.sysaltfiles WHERE dbid = 2;
Du måste starta om SQL Server-containern för att ändringarna ska börja gälla.
docker stop sql1 docker start sql1
docker stop sql1 docker start sql1
docker stop sql1 docker start sql1
Öppna en interaktiv
bash
session för att ansluta till containern.docker exec -it sql1 bash
docker exec -it sql1 bash
docker exec -it sql1 bash
När du är ansluten till det interaktiva gränssnittet kör du följande kommando för att kontrollera platsen för
tempdb
:ls /var/opt/mssql/tempdb/
Om flytten lyckades visas liknande utdata:
tempdb.mdf templog.ldf
Ändra standardfilens plats
Lägg till variabeln MSSQL_DATA_DIR
för att ändra din datakatalog i kommandot docker run
och montera sedan en volym på den platsen som containerns användare har åtkomst till.
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
Använd mssql-config för att konfigurera SQL Server i en container
Du kan använda verktyget mssql-conf för att ange parametrar i SQL Server-containrar.
Du kan till exempel ange en minnesgräns för instansen med hjälp av följande steg:
Anslut direkt till containern med
docker exec
som rotanvändare. Ersättsqlcontainer
med containernamnet.docker exec -u root -it sqlcontainer "bash"
Använd mssql-conf för att ändra en inställning. I det här exemplet ändras inställningen
memory.memorylimitmb
till 2 GB (2 048 MB)./opt/mssql/bin/mssql-conf set memory.memorylimitmb 2048
Exempel på anpassad Docker-container
Exempel på anpassade Docker-containrar finns i https://github.com/microsoft/mssql-docker/tree/master/linux/preview/examples. Exemplen är:
- Dockerfile-exempel med Full-Text Search
- Dockerfile-exempel för RHEL 7 och SQL Server 2019
- Dockerfile-exempel för RHEL 8 och SQL Server 2017
- Dockerfile-exempel för Ubuntu 20.04 och SQL Server 2019 med Full-Text Search, PolyBase och Tools
Information om hur du skapar och kör Docker-containrar med Dockerfiles finns i ML Services-exempel på GitHub.
Relaterat innehåll
- Kom igång med SQL Server 2017-containeravbildningar (14.x) i Docker genom att gå igenom snabbstart
- Kom igång med SQL Server 2019-containeravbildningar (15.x) i Docker genom att gå igenom snabbstart
- Kom igång med SQL Server 2022-containeravbildningar (16.x) i Docker genom att gå igenom snabbstart
Bidra till SQL-dokumentation
Visste du att du kan redigera SQL-innehåll själv? Om du gör det hjälper du inte bara till att förbättra vår dokumentation, utan du får även kredit som deltagare på sidan.
Mer information finns i Redigera Microsoft Learn-dokumentation.