Dela via


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 rmtas 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:

  1. 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.

  2. Du måste också aktivera den nya parametern memory.enablecontainersharedmemory i mssql.conf inuti containern. Du kan montera mssql.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 uppdatera mssql.conf inuti containern manuellt. Här är ett exempel på en mssql.conf fil med inställningen memory.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.

  1. 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 tempdbmå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
    
  2. Kontrollera att tempdb filplatsen har ändrats med hjälp av följande T-SQL-skript:

    SELECT *
    FROM sys.sysaltfiles
    WHERE dbid = 2;
    
  3. 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
    
  4. Ö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:

  1. Anslut direkt till containern med docker exec som rotanvändare. Ersätt sqlcontainer med containernamnet.

    docker exec -u root -it sqlcontainer "bash"
    
  2. 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:

Information om hur du skapar och kör Docker-containrar med Dockerfiles finns i ML Services-exempel på GitHub.

  • 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.