Distribuire e connettersi a contenitori Linux di SQL Server
Si applica a: SQL Server - Linux
Questo articolo illustra come implementare e connettersi ai contenitori Linux di SQL Server.
Per altri scenari di distribuzione, vedere:
Nota
Questo articolo è incentrato specificamente 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 il pull e l'esecuzione delle immagini del contenitore Docker per SQL Server, seguire i prerequisiti e i passaggi illustrati nella guida di avvio rapido 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 di SQL Server 2022 con Docker
Questo articolo dedicato alla configurazione descrive altri scenari di utilizzo nelle sezioni seguenti.
Connettersi ed eseguire 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 uno strumento esterno Linux, Windows o macOS che supporti 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.
Nota
Le versioni più recenti di sqlcmd (in mssql-tools18) sono protette per impostazione predefinita. Se si usa la versione 18 o successiva, è necessario aggiungere l'opzione No
a sqlcmd per specificare che la crittografia è facoltativa, non obbligatoria.
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 diversa dalla porta 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-tools18/bin/sqlcmd -S localhost -U SA -P '<YourPassword>'
Nota
Le versioni più recenti di sqlcmd sono protette per impostazione predefinita. Per altre informazioni sulla crittografia della connessione, vedere l’utilità sqlcmd per Windows e Connessione con sqlcmd per Linux e macOS. Se la connessione non va a buon fine, è possibile aggiungere l'opzione
-No
a sqlcmd per specificare che la crittografia è facoltativa, non obbligatoria.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 scoprire 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.
docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P '<YourStrong!Passw0rd>' \
-Q 'SELECT @@VERSION'
Nota
Le versioni più recenti di sqlcmd sono protette per impostazione predefinita. Per altre informazioni sulla crittografia della connessione, vedere l’utilità sqlcmd per Windows e Connessione con sqlcmd per Linux e macOS. Se la connessione non va a buon fine, è possibile aggiungere l'opzione -No
a sqlcmd per specificare che la crittografia è facoltativa, non obbligatoria.
docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd `
-S localhost -U SA -P "<YourStrong!Passw0rd>" `
-Q "SELECT @@VERSION"
Nota
Le versioni più recenti di sqlcmd sono protette per impostazione predefinita. Per altre informazioni sulla crittografia della connessione, vedere l’utilità sqlcmd per Windows e Connessione con sqlcmd per Linux e macOS. Se la connessione non va a buon fine, è possibile aggiungere l'opzione -No
a sqlcmd per specificare che la crittografia è facoltativa, non obbligatoria.
docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd ^
-S localhost -U SA -P "<YourStrong!Passw0rd>" ^
-Q "SELECT @@VERSION"
Nota
Le versioni più recenti di sqlcmd sono protette per impostazione predefinita. Per altre informazioni sulla crittografia della connessione, vedere l’utilità sqlcmd per Windows e Connessione con sqlcmd per Linux e macOS. Se la connessione non va a buon fine, è possibile aggiungere l'opzione -No
a sqlcmd per specificare che la crittografia è facoltativa, non obbligatoria.
È anche possibile identificare la versione di 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, esegue un nuovo contenitore con una variabile di ambiente PAL_PROGRAM_INFO=1
. Il contenitore risultante viene chiuso immediatamente e il comando docker rm
lo rimuove.
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
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.
- Ubuntu 20.04 è supportato a partire da SQL Server 2019 (15.x) CU10.
- È 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 il
tag
di Docker per la versione che si vuole usare. Per visualizzare tutti i tag disponibili, vedere il Registro artefatti Microsoft.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. Utilizzare 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
.
Il comando seguente, ad esempio, esegue il pull del contenitore di Cumulative Update 18 per SQL Server 2019 (15.x) che usa RHEL 8:
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 dal Registro artefatti Microsoft. 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 delle edizioni SQL Server Standard ed Enterprise sono disponibili tramite Microsoft Volume Licensing.
È possibile configurare l'immagine del contenitore Developer anche per eseguire le edizioni di produzione.
Per eseguire un’edizione di produzione, esaminare i requisiti e ed eseguire le procedure in questo avvio rapido. È necessario specificare l'edizione di produzione con la variabile di ambiente MSSQL_PID
. L'esempio seguente mostra come eseguire la versione più recente dell'immagine del contenitore di SQL Server 2022 (16.x) per l'edizione Enterprise Core.
docker run --name sqlenterprise \
-e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
-e 'MSSQL_PID=EnterpriseCore' -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=EnterpriseCore" -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=EnterpriseCore" -p 1433:1433 ^
-d "mcr.microsoft.com/mssql/server:2022-latest"
Importante
Passando il valore Y
alla variabile di ambiente ACCEPT_EULA
e un valore di edizione a MSSQL_PID
, si conferma la disponibilità di una licenza valida ed esistente per l'edizione e la versione di SQL Server che si intende usare. Si accetta anche che l'uso del software SQL Server in un'immagine del contenitore sarà disciplinato dalle condizioni della licenza di 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 di SQL Server 2017 (14.x) ed esegue il mapping di questi alle porte 1401
e 1402
nel 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 di SQL Server 2019 (15.x) ed esegue il mapping di questi alle porte 1401
e 1402
nel 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 di SQL Server 2022 (16.x) ed esegue il mapping di questi alle porte 1401
e 1402
nel 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.
Nota
Le versioni più recenti di sqlcmd (in mssql-tools18) sono protette per impostazione predefinita. Se si usa la versione 18 o successiva, è necessario aggiungere l'opzione No
a sqlcmd per specificare che la crittografia è facoltativa, non obbligatoria.
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
.
Contenuto correlato
- 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 informazioni introduttive sull'uso delle immagini del contenitore di SQL Server 2022 (16.x) in Docker, vedere questo articolo di avvio rapido
- 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
- Proteggere i contenitori Docker di SQL Server
Contribuire alla documentazione di SQL
Il contenuto SQL può essere modificato. L'autore delle modifiche contribuirà a migliorare la documentazione e verrà accreditato come collaboratore alla realizzazione della pagina.
Per maggiori informazioni, vedere Come contribuire alla documentazione di SQL Server