Distribuire e connettersi a contenitori Linux SQL Server
Si applica a:SQL Server - Linux
Questo articolo illustra come distribuire e connettersi a SQL Server contenitori Linux.
Per altri scenari di distribuzione, vedere:
Nota
Questo articolo è incentrato in particolare sull'uso dell'immagine mssql-server-linux
. Le distribuzioni di SQL Server nei contenitori Windows non sono coperte dal supporto. Per finalità di sviluppo e test, è possibile creare immagini di contenitori personalizzate da usare con SQL Server in contenitori di Windows. In GitHub sono disponibili file di esempio. I file di esempio sono solo per riferimento.
Importante
Prima di scegliere di eseguire un contenitore SQL Server per i casi d'uso di produzione, vedere i criteri di supporto per i contenitori SQL Server per assicurarsi che l'esecuzione avvenga in una configurazione supportata.
Questo video di 6 minuti offre un'introduzione relativa all'esecuzione di SQL Server nei contenitori:
Effettuare il pull ed eseguire l'immagine del contenitore
Per eseguire il pull e l'esecuzione delle immagini del contenitore Docker per SQL Server, seguire i prerequisiti e i passaggi descritti nella guida introduttiva seguente:
- Eseguire l'immagine del contenitore di SQL Server 2017 con Docker
- Eseguire l'immagine del contenitore di SQL Server 2019 con Docker
- Eseguire l'immagine del contenitore SQL Server 2022 con Docker
Questo articolo dedicato alla configurazione descrive altri scenari di utilizzo nelle sezioni seguenti.
Connessione ed esecuzione di query
È possibile connettersi a SQL Server ed eseguire query in un contenitore dall'esterno o dall'interno del contenitore. Nelle sezioni seguenti vengono illustrati entrambi gli scenari.
Strumenti all'esterno del contenitore
È possibile connettersi all'istanza di SQL Server nell'host contenitore da qualsiasi strumento esterno di Linux, Windows o macOS che supporta le connessioni SQL. Alcuni strumenti comuni includono:
Nell'esempio seguente viene usato sqlcmd per connettersi a SQL Server in esecuzione in un contenitore. L'indirizzo IP nella stringa di connessione è l'indirizzo IP del computer host in cui è in esecuzione il contenitore.
sqlcmd -S 10.3.2.4 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4 -U SA -P "<YourPassword>"
Se è stato eseguito il mapping di una porta host che non era l'impostazione predefinita 1433
, aggiungere tale porta alla stringa di connessione. Ad esempio, se si specifica -p 1400:1433
nel comando docker run
connettersi specificando in modo esplicito la porta 1400.
sqlcmd -S 10.3.2.4,1400 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1400 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1400 -U SA -P "<YourPassword>"
Strumenti all'interno del contenitore
A partire da SQL Server 2017 (14.x), gli strumenti da riga di comando di SQL Server sono inclusi nell'immagine del contenitore. Se ci si connette all'immagine con un prompt dei comandi interattivo, è possibile eseguire gli strumenti localmente.
Usare il comando
docker exec -it
per avviare una shell Bash interattiva all'interno del contenitore in esecuzione. Nell'esempio seguentee69e056c702d
è l'ID del contenitore.docker exec -it e69e056c702d "bash"
Suggerimento
Non è sempre necessario specificare l'intero ID del contenitore. È sufficiente specificare un numero sufficiente di caratteri per identificarlo in modo univoco. In questo esempio potrebbe essere quindi sufficiente usare
e6
oe69
anziché l'ID completo. Per individuare l'ID del contenitore, eseguire il comandodocker ps -a
.Una volta all'interno del contenitore, eseguire la connessione in locale con sqlcmd usando il percorso completo.
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '<YourPassword>'
Dopo aver completato le operazioni con sqlcmd, digitare
exit
.Al termine delle operazioni con il prompt dei comandi interattivo, digitare
exit
. Dopo la chiusura della shell Bash interattiva, il contenitore continua l'esecuzione.
Controllare la versione del contenitore
Se si vuole conoscere la versione di SQL Server in un contenitore in esecuzione, eseguire il comando seguente per visualizzarla. Sostituire <Container ID or name>
con l'ID o il nome del contenitore di destinazione. Sostituire <YourStrong!Passw0rd>
con la password SQL Server per l'account amministratore di sistema.
sudo docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P '<YourStrong!Passw0rd>' \
-Q 'SELECT @@VERSION'
docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd `
-S localhost -U SA -P "<YourStrong!Passw0rd>" `
-Q "SELECT @@VERSION"
docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd ^
-S localhost -U SA -P "<YourStrong!Passw0rd>" ^
-Q "SELECT @@VERSION"
È anche possibile identificare la versione SQL Server e il numero di build per un'immagine del contenitore di destinazione. Il comando seguente visualizza la versione di SQL Server e informazioni sulla build per l'immagine mcr.microsoft.com/mssql/server:2022-latest
. A tale scopo, eseguire un nuovo contenitore con una variabile PAL_PROGRAM_INFO=1
di ambiente . Il contenitore risultante viene chiuso immediatamente e il comando docker rm
lo rimuove.
sudo docker run -e PAL_PROGRAM_INFO=1 --name sqlver \
-ti mcr.microsoft.com/mssql/server:2022-latest && \
sudo docker rm sqlver
docker run -e PAL_PROGRAM_INFO=1 --name sqlver `
-ti mcr.microsoft.com/mssql/server:2022-latest; `
docker rm sqlver
docker run -e PAL_PROGRAM_INFO=1 --name sqlver ^
-ti mcr.microsoft.com/mssql/server:2022-latest && ^
docker rm sqlver
I comandi precedenti visualizzano informazioni sulla versione simili all'output seguente:
sqlservr
Version 16.0.1000.6
Build ID d81e9b6de06534e649bd57dd609aa3050f5e380f361b7f8a80a80eeb71e7422c
Build Type release
Git Version 2aede92f
Built at Tue Nov 01 06:11:40 GMT 2022
PAL
Build ID 754097e8f0db68f559e1cbc9d46952ac9fd518b5da9f12964ef40fc9033720e3
Build Type release
Git Version d88e3e1130
Built at Tue Nov 01 06:08:02 GMT 2022
Packages
system.security mssql-16.0.1000.6_26_official-release
system.certificates mssql-16.0.1000.6_26_official-release
sqlagent 16.0.1000.6
system.wmi 10.0.17763.2061.202107231
system.netfx 4.7.0.0.202104262
system mssql-16.0.1000.6_26_official-release
system.common 10.0.17763.2061.202107231
sqlservr 16.0.1000.6
secforwarderxplat 16.0.1000.6
Eseguire un'immagine del contenitore di SQL Server specifica
Nota
- A partire da SQL Server 2019 (15.x) CU3 è supportato Ubuntu 18.04.
- A partire da SQL Server 2019 (15.x) CU10 è supportato Ubuntu 20.04.
- È possibile recuperare un elenco di tutti i tag disponibili per mssql/server in https://mcr.microsoft.com/v2/mssql/server/tags/list.
Esistono scenari in cui è possibile che non si voglia usare la versione più recente dell'immagine del contenitore di SQL Server. Per eseguire un'immagine del contenitore di SQL Server specifica, seguire questa procedura:
Identificare Docker
tag
per la versione che si vuole usare. Per visualizzare i tag disponibili, vedere la pagina mssql-server-linux dell'hub Docker.Eseguire il pull dell'immagine del contenitore di SQL Server con il tag. Ad esempio, per eseguire il pull dell'immagine
2019-CU18-ubuntu-20.04
, sostituire<image_tag>
nel comando seguente con2019-CU18-ubuntu-20.04
.docker pull mcr.microsoft.com/mssql/server:<image_tag>
Per eseguire un nuovo contenitore con tale immagine, specificare il nome del tag nel comando
docker run
. Nel comando seguente sostituire<image_tag>
con la versione che si vuole eseguire.Importante
La variabile di ambiente
SA_PASSWORD
è deprecata. Usare inveceMSSQL_SA_PASSWORD
.docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
Questi passaggi possono essere usati anche per effettuare il downgrade di un contenitore esistente. Ad esempio, potrebbe essere necessario effettuare il rollback o il downgrade di un contenitore in esecuzione per la risoluzione dei problemi o per attività di test. Per effettuare il downgrade di un contenitore in esecuzione, è necessario usare una tecnica di persistenza per la cartella dati. Seguire la stessa procedura descritta nella sezione dedicata all'aggiornamento, ma specificare il nome del tag della versione precedente quando si esegue il nuovo contenitore.
Eseguire immagini del contenitore basate su RHEL
La documentazione dedicata alle immagini del contenitore di SQL Server per Linux si riferisce a contenitori basati su Ubuntu. A partire da SQL Server 2019 (15.x), è possibile usare contenitori basati su Red Hat Enterprise Linux (RHEL). Un esempio dell'immagine per RHEL sarà simile a mcr.microsoft.com/mssql/rhel/server:2019-CU15-rhel-8
.
Ad esempio, il comando seguente esegue il pull del contenitore Cumulative Update 18 per SQL Server 2019 (15.x) che usa RHEL 8:
sudo docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU18-rhel-8.4
docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU18-rhel-8.4
docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU18-rhel-8.4
Eseguire immagini del contenitore di produzione
Le istruzioni di avvio rapido nella sezione precedente prevedono l'uso dell'edizione Developer gratuita di SQL Server da Docker Hub. La maggior parte delle informazioni è comunque applicabile per l'esecuzione di immagini del contenitore di produzione, ad esempio per le edizioni Enterprise, Standard o Web. Esistono tuttavia alcune differenze descritte di seguito.
È possibile usare SQL Server in un ambiente di produzione solo se è disponibile una licenza valida. Qui è possibile ottenere una licenza di produzione per SQL Server Express gratuita. le licenze SQL Server Standard ed Enterprise Edition sono disponibili tramite contratti multilicenza Microsoft.
È possibile configurare l'immagine del contenitore Developer anche per eseguire le edizioni di produzione.
Per eseguire un'edizione di produzione, esaminare i requisiti e le procedure di esecuzione nella guida introduttiva. È necessario specificare l'edizione di produzione con la MSSQL_PID
variabile di ambiente. L'esempio seguente illustra come eseguire l'immagine del contenitore SQL Server 2022 (16.x) più recente per l'edizione Enterprise.
docker run --name sqlenterprise \
-e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
-e 'MSSQL_PID=Enterprise' -p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2022-latest
docker run --name sqlenterprise `
-e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
-e "MSSQL_PID=Enterprise" -p 1433:1433 `
-d "mcr.microsoft.com/mssql/server:2022-latest"
docker run --name sqlenterprise ^
-e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" ^
-e "MSSQL_PID=Enterprise" -p 1433:1433 ^
-d "mcr.microsoft.com/mssql/server:2022-latest"
Importante
Passando il valore Y
alla variabile ACCEPT_EULA
di ambiente e un valore di edizione a MSSQL_PID
, si sta esprimendo che si dispone di una licenza valida ed esistente per l'edizione e la versione di SQL Server che si intende usare. L'utente accetta inoltre che l'uso di SQL Server software in esecuzione in un'immagine del contenitore sarà disciplinato dalle condizioni della licenza SQL Server.
Nota
Per un elenco completo dei valori possibili per MSSQL_PID
, vedere Configurare le impostazioni di SQL Server con le variabili di ambiente in Linux.
Eseguire più contenitori di SQL Server
Docker prevede un modo per eseguire più contenitori di SQL Server nello stesso computer host. Usare questo approccio per gli scenari che richiedono più istanze di SQL Server nello stesso host. Ogni contenitore deve essere esposto su una porta diversa.
L'esempio seguente crea due contenitori SQL Server 2017 (14.x) ed esegue il mapping alle porte 1401
e 1402
al computer host.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
L'esempio seguente crea due contenitori SQL Server 2019 (15.x) ed esegue il mapping alle porte 1401
e 1402
al computer host.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest
L'esempio seguente crea due contenitori SQL Server 2022 (16.x) ed esegue il mapping alle porte 1401
e 1402
al computer host.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest
Sono ora disponibili due istanze di SQL Server in esecuzione in contenitori separati. I client possono connettersi a ogni istanza di SQL Server usando l'indirizzo IP dell'host contenitore e il numero di porta per il contenitore.
sqlcmd -S 10.3.2.4,1401 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1402 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1401 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1402 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1401 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1402 -U SA -P "<YourPassword>"
Aggiornare SQL Server nei contenitori
Per aggiornare l'immagine del contenitore con Docker, identificare prima di tutto il tag per la versione per l'aggiornamento. Eseguire il pull di questa versione dal Registro di sistema con il comando docker pull
:
docker pull mcr.microsoft.com/mssql/server:<image_tag>
L'immagine di SQL Server viene così aggiornata per tutti i nuovi contenitori creati, ma SQL Server non viene aggiornato in alcun contenitore in esecuzione. A tale scopo, è necessario creare un nuovo contenitore con l'immagine del contenitore di SQL Server più recente ed eseguire la migrazione dei dati al nuovo contenitore.
Assicurarsi di usare una delle tecniche di persistenza dei dati per il contenitore di SQL Server esistente. In questo modo è possibile avviare un nuovo contenitore con gli stessi dati.
Arrestare il contenitore di SQL Server con il comando
docker stop
.Creare un nuovo contenitore di SQL Server con
docker run
e specificare una directory host mappata o un contenitore di volumi di dati. Assicurarsi di usare il tag specifico per l'aggiornamento di SQL Server. Il nuovo contenitore usa ora una nuova versione di SQL Server con i dati di SQL Server esistenti.Importante
L'aggiornamento è supportato solo tra le versioni RC1, RC2 e GA al momento.
Verificare i database e i dati nel nuovo contenitore.
Facoltativamente, rimuovere il contenitore precedente con
docker rm
.
Passaggi successivi
- Per informazioni introduttive sull'uso delle immagini del contenitore di SQL Server 2017 (14.x) in Docker, vedere questo articolo di avvio rapido
- Per informazioni introduttive sull'uso delle immagini del contenitore di SQL Server 2019 (15.x) in Docker, vedere questo articolo di avvio rapido
- Per iniziare a usare SQL Server 2022 (16.x) immagini del contenitore in Docker, vedere la guida introduttiva
Vedere altre informazioni sulla configurazione e la personalizzazione dei contenitori Docker
Nel repository GitHub mssql-docker sono disponibili risorse, feedback e documentazione su problemi noti
Risoluzione dei problemi dei contenitori Docker di SQL Server
Esplorare la disponibilità elevata per i contenitori di SQL Server