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:

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

  1. Usare il comando docker exec -it per avviare una shell Bash interattiva all'interno del contenitore in esecuzione. Nell'esempio seguente e69e056c702d è 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 o e69 anziché l'ID completo. Per individuare l'ID del contenitore, eseguire il comando docker ps -a.

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

  3. Dopo aver completato le operazioni con sqlcmd, digitare exit.

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

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

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

  1. Identificare il tag di Docker per la versione che si vuole usare. Per visualizzare tutti i tag disponibili, vedere il Registro artefatti Microsoft.

  2. 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 con 2019-CU18-ubuntu-20.04.

    docker pull mcr.microsoft.com/mssql/server:<image_tag>
    
  3. 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 invece MSSQL_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:

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

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

  2. Arrestare il contenitore di SQL Server con il comando docker stop.

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

  4. Verificare i database e i dati nel nuovo contenitore.

  5. Facoltativamente, rimuovere il contenitore precedente con docker rm.

  • 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

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 altre informazioni, vedere Come contribuire alla documentazione di SQL Server