Avvio rapido: Eseguire immagini del contenitore di SQL Server in Linux con Docker

Si applica a: SQL Server - Linux

In questa guida di avvio rapido si usa Docker per effettuare il pull ed eseguire l'immagine del contenitore di SQL Server 2017 (14.x) in Linux, mssql-server-linux. Sarà quindi possibile connettersi con sqlcmd per creare il primo database ed eseguire query.

Per altre informazioni sulle piattaforme supportate, vedere Note sulla versione per SQL Server 2017 in Linux.

Avviso

Se si arresta e si rimuove un contenitore, i dati di SQL Server eventualmente presenti nel contenitore vengono eliminati in modo definitivo. Per ulteriori informazioni sulla conservazione dei dati, creare un file di backup e copiarlo all'esterno del contenitore oppure usare una tecnica di persistenza dei dati del contenitore.

In questa guida di avvio rapido vengono creati contenitori di SQL Server 2017 (14.x). Se preferisci creare contenitori Linux per versioni diverse di SQL Server, vedi le versioni SQL Server 2019 (15.x) o SQL Server 2022 (16.x) di questo articolo.

In questa guida di avvio rapido si usa Docker per effettuare il pull ed eseguire l'immagine del contenitore di SQL Server 2019 (15.x) in Linux, mssql-server-linux. Sarà quindi possibile connettersi con sqlcmd per creare il primo database ed eseguire query.

Per altre informazioni sulle piattaforme supportate, vedere Note sulla versione per SQL Server 2019 in Linux.

Avviso

Se si arresta e si rimuove un contenitore, i dati di SQL Server eventualmente presenti nel contenitore vengono eliminati in modo definitivo. Per ulteriori informazioni sulla conservazione dei dati, creare un file di backup e copiarlo all'esterno del contenitore oppure usare una tecnica di persistenza dei dati del contenitore.

In questa guida di avvio rapido vengono creati contenitori di SQL Server 2019 (15.x). Se preferisci creare contenitori Linux per versioni diverse di SQL Server, vedi le versioni SQL Server 2017 (14.x) o SQL Server 2022 (16.x) di questo articolo.

In questa guida di avvio rapido si usa Docker per effettuare il pull ed eseguire l'immagine del contenitore di SQL Server 2022 (16.x) in Linux, mssql-server-linux. Sarà quindi possibile connettersi con sqlcmd per creare il primo database ed eseguire query.

Per altre informazioni sulle piattaforme supportate, vedere Note sulla versione per SQL Server 2022 in Linux.

Avviso

Se si arresta e si rimuove un contenitore, i dati di SQL Server eventualmente presenti nel contenitore vengono eliminati in modo definitivo. Per ulteriori informazioni sulla conservazione dei dati, creare un file di backup e copiarlo all'esterno del contenitore oppure usare una tecnica di persistenza dei dati del contenitore.

In questa guida di avvio rapido vengono creati contenitori di SQL Server 2022 (16.x). Se si preferisce creare contenitori Linux per versioni diverse di SQL Server, vedere le versioni SQL Server 2017 (14.x) o SQL Server 2019 (15.x) di questo articolo.

Questa immagine è costituita da SQL Server in esecuzione su Linux basato su Ubuntu. Può essere usata con il motore Docker 1.8 o versioni successive su Linux.

A partire da SQL Server 2022 (16.x) CU 14 e SQL Server 2019 (15.x) CU 28, le immagini del contenitore includono il nuovo pacchetto mssql-tools18. La directory /opt/mssql-tools/bin precedente viene eliminata gradualmente. La nuova directory per gli strumenti microsoft ODBC 18 è /opt/mssql-tools18/bin, in linea con l'offerta degli strumenti più recenti. Per altre informazioni sulle modifiche e sui miglioramenti della sicurezza, vedere Driver ODBC 18.0 per SQL Server.

Gli esempi riportati in questo articolo usano il comando docker. La maggior parte di questi comandi funziona tuttavia anche con Podman. Podman offre un'interfaccia della riga di comando simile al motore Docker. È possibile trovare altre informazioni su Podman qui.

Importante

sqlcmd attualmente non supporta il parametro MSSQL_PID durante la creazione di contenitori. Se si usano le istruzioni sqlcmd in questa guida di avvio rapido, si crea un contenitore con l'edizione Developer di SQL Server. Usa le istruzioni dell'interfaccia della riga di comando per creare un contenitore usando la licenza di tua scelta. Per altre informazioni, vedi Distribuire e connettersi a contenitori di SQL Server Linux.

Prerequisiti

  • Motore Docker 1.8 o versioni successive in qualsiasi distribuzione di Linux. Per altre informazioni, vedere Installare Docker.

Effettuare il pull ed eseguire l'immagine del contenitore di SQL Server in Linux

Prima di iniziare la procedura seguente, assicurati di aver selezionato la shell preferita (Bash, PowerShell o cmd) all'inizio di questo articolo.

Per i comandi Bash in questo articolo, si usa sudo. Se non si vuole usare sudo per eseguire Docker, è possibile configurare un gruppo docker e aggiungere utenti a tale gruppo. Per altre informazioni, vedere Post-installation steps for Linux (Passaggi post-installazione per Linux).

Eseguire il pull del contenitore dal registro

Eseguire il pull dell'immagine del contenitore di SQL Server 2017 (14.x) in Linux dal Registro Container Microsoft.

sudo docker pull mcr.microsoft.com/mssql/server:2017-latest
docker pull mcr.microsoft.com/mssql/server:2017-latest
docker pull mcr.microsoft.com/mssql/server:2017-latest

In questa guida di avvio rapido vengono creati contenitori di SQL Server 2017 (14.x). Se preferisci creare contenitori Linux per versioni diverse di SQL Server, vedi le versioni SQL Server 2019 (15.x) o SQL Server 2022 (16.x) di questo articolo.

Il comando riportato sopra esegue il pull dell'immagine del contenitore di SQL Server 2017 (14.x) in Linux più recente. Se si vuole eseguire il pull di un'immagine specifica, aggiungere un segno di due punti e il nome del tag, ad esempio mcr.microsoft.com/mssql/server:2017-GA-ubuntu. Per visualizzare tutte le immagini disponibili, vedi il Registro artefatti Microsoft.

Eseguire il contenitore

Per eseguire l'immagine del contenitore Linux con Docker, è possibile usare il comando seguente da una shell Bash o da un prompt dei comandi PowerShell con privilegi elevati.

Importante

La variabile di ambiente SA_PASSWORD è deprecata. Utilizzare invece MSSQL_SA_PASSWORD.

sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \
   -p 1433:1433 --name sql1 --hostname sql1 \
   -d \
   mcr.microsoft.com/mssql/server:2017-latest

Se usi PowerShell Core, sostituisci le virgolette doppie con virgolette singole.

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2017-latest

La password deve essere conforme ai criteri password predefiniti di SQL Server, altrimenti il contenitore non può configurare SQL Server e smette di funzionare. Per impostazione predefinita, la password deve essere composta da almeno otto caratteri e contenere caratteri di tre delle quattro categorie seguenti: lettere maiuscole, lettere minuscole, cifre in base 10 e simboli. È possibile esaminare il log degli errori mediante il comando docker logs.

Per impostazione predefinita, in questa guida di avvio rapido viene creato un contenitore con l'edizione Developer di SQL Server. Il processo di esecuzione delle edizioni di produzione nei contenitori è leggermente diverso. Per altre informazioni, vedere Run production container images (Eseguire immagini del contenitore di produzione).

La tabella seguente offre una descrizione dei parametri dell'esempio docker run precedente:

Parametro Descrizione
-e "ACCEPT_EULA=Y" Impostare la variabile ACCEPT_EULA su un valore qualsiasi per confermare l'accettazione del contratto di licenza con l'utente finale. Impostazione obbligatoria per l'immagine di SQL Server.
-e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" Specifica la password complessa composta da almeno otto caratteri e conforme ai criteri password. Impostazione obbligatoria per l'immagine di SQL Server.
-e "MSSQL_COLLATION=<SQL_Server_collation>" Specifica le regole di confronto di SQL Server personalizzate anziché il valore predefinito SQL_Latin1_General_CP1_CI_AS.
-p 1433:1433 Eseguire il mapping di una porta TCP nell'ambiente host (primo valore) con una porta TCP nel contenitore (secondo valore). In questo esempio SQL Server è in ascolto sulla porta TCP 1433 del contenitore e la porta del contenitore è a sua volta esposta alla porta 1433 nell'host.
--name sql1 Specificare un nome personalizzato per il contenitore, invece di un nome generato in modo casuale. Se si eseguono più contenitori, non è possibile riutilizzare lo stesso nome.
--hostname sql1 Usato per impostare in modo esplicito il nome host del contenitore. Se non viene specificato, il valore predefinito del nome host è l'ID contenitore, ovvero un GUID di sistema generato in modo casuale.
-d Esegue il contenitore in background (daemon).
mcr.microsoft.com/mssql/server:2017-latest Immagine del contenitore di SQL Server in Linux.

Visualizzare l’elenco dei contenitori

  1. Per visualizzare i contenitori di Docker, usare il comando docker ps.

    sudo docker ps -a
    
    docker ps -a
    
    docker ps -a
    

    L'output dovrebbe essere simile all'esempio seguente:

    CONTAINER ID   IMAGE                                        COMMAND                    CREATED         STATUS         PORTS                                       NAMES
    d4a1999ef83e   mcr.microsoft.com/mssql/server:2017-latest   "/opt/mssql/bin/perm..."   2 minutes ago   Up 2 minutes   0.0.0.0:1433->1433/tcp, :::1433->1433/tcp   sql1
    
  2. Se nella colonna STATUS è impostato lo stato Up, SQL Server è in esecuzione nel contenitore e in ascolto sulla porta specificata nella colonna PORTS. Se la colonna STATUS del contenitore di SQL Server è impostata su Exited, vedi la Risoluzione dei problemi dei contenitori Docker di SQL Server. Il server è pronto per le connessioni quando i log degli errori di SQL Server visualizzano questo messaggio: SQL Server is now ready for client connections. This is an informational message; no user action is required. È possibile esaminare il log degli errori di SQL Server all'interno del contenitore usando il comando seguente:

    sudo docker exec -t sql1 cat /var/opt/mssql/log/errorlog | grep connection
    

    Il parametro --hostname illustrato in precedenza sostituisce il nome interno del contenitore con un valore personalizzato. Questo valore è il nome che viene restituito nella query Transact-SQL seguente:

    SELECT @@SERVERNAME,
        SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
        SERVERPROPERTY('MachineName'),
        SERVERPROPERTY('ServerName');
    

    L'impostazione di --hostname e --name sullo stesso valore è un buon modo per identificare facilmente il contenitore di destinazione.

  3. Come passaggio finale, cambia la password dell'amministratore di sistema in un ambiente di produzione, perché il valore di MSSQL_SA_PASSWORD è visibile nell'output di ps -eax e viene archiviato nella variabile di ambiente con lo stesso nome.

Effettuare il pull ed eseguire l'immagine del contenitore di SQL Server in Linux

Prima di iniziare la procedura seguente, assicurati di aver selezionato la shell preferita (Bash, PowerShell o cmd) all'inizio di questo articolo.

Per i comandi Bash in questo articolo, si usa sudo. Se non si vuole usare sudo per eseguire Docker, è possibile configurare un gruppo docker e aggiungere utenti a tale gruppo. Per altre informazioni, vedere Post-installation steps for Linux (Passaggi post-installazione per Linux).

Eseguire il pull del contenitore dal registro

Eseguire il pull dell'immagine del contenitore di SQL Server 2019 (15.x) in Linux dal Registro Container Microsoft.

docker pull mcr.microsoft.com/mssql/server:2019-latest
docker pull mcr.microsoft.com/mssql/server:2019-latest
docker pull mcr.microsoft.com/mssql/server:2019-latest

In questa guida di avvio rapido vengono creati contenitori di SQL Server 2019 (15.x). Se preferisci creare contenitori Linux per versioni diverse di SQL Server, vedi le versioni SQL Server 2017 (14.x) o SQL Server 2022 (16.x) di questo articolo.

Il comando riportato sopra esegue il pull dell'immagine del contenitore di SQL Server 2019 (15.x) in Linux più recente. Se si vuole eseguire il pull di un'immagine specifica, aggiungere un segno di due punti e il nome del tag, ad esempio mcr.microsoft.com/mssql/server:2019-GA-ubuntu. Per visualizzare tutte le immagini disponibili, vedi il Registro artefatti Microsoft.

Eseguire il contenitore

Per eseguire l'immagine del contenitore Linux con Docker, è possibile usare il comando seguente da una shell Bash o da un prompt dei comandi PowerShell con privilegi elevati.

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 1433:1433 --name sql1 --hostname sql1 \
   -d \
   mcr.microsoft.com/mssql/server:2019-latest

Se usi PowerShell Core, sostituisci le virgolette doppie con virgolette singole.

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2019-latest

La password deve essere conforme ai criteri password predefiniti di SQL Server, altrimenti il contenitore non può configurare SQL Server e smette di funzionare. Per impostazione predefinita, la password deve essere composta da almeno otto caratteri e contenere caratteri di tre delle quattro categorie seguenti: lettere maiuscole, lettere minuscole, cifre in base 10 e simboli. È possibile esaminare il log degli errori mediante il comando docker logs.

Per impostazione predefinita, in questa guida di avvio rapido viene creato un contenitore con l'edizione Developer di SQL Server. Il processo di esecuzione delle edizioni di produzione nei contenitori è leggermente diverso. Per altre informazioni, vedere Run production container images (Eseguire immagini del contenitore di produzione).

La tabella seguente offre una descrizione dei parametri dell'esempio docker run precedente:

Parametro Descrizione
-e "ACCEPT_EULA=Y" Impostare la variabile ACCEPT_EULA su un valore qualsiasi per confermare l'accettazione del contratto di licenza con l'utente finale. Impostazione obbligatoria per l'immagine di SQL Server.
-e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" Specifica la password complessa composta da almeno otto caratteri e conforme ai criteri password. Impostazione obbligatoria per l'immagine di SQL Server.
-e "MSSQL_COLLATION=<SQL_Server_collation>" Specifica le regole di confronto di SQL Server personalizzate anziché il valore predefinito SQL_Latin1_General_CP1_CI_AS.
-p 1433:1433 Eseguire il mapping di una porta TCP nell'ambiente host (primo valore) con una porta TCP nel contenitore (secondo valore). In questo esempio SQL Server è in ascolto sulla porta TCP 1433 del contenitore e la porta del contenitore è a sua volta esposta alla porta 1433 nell'host.
--name sql1 Specificare un nome personalizzato per il contenitore, invece di un nome generato in modo casuale. Se si eseguono più contenitori, non è possibile riutilizzare lo stesso nome.
--hostname sql1 Usato per impostare in modo esplicito il nome host del contenitore. Se non viene specificato, il valore predefinito del nome host è l'ID contenitore, ovvero un GUID di sistema generato in modo casuale.
-d Esegue il contenitore in background (daemon).
mcr.microsoft.com/mssql/server:2019-latest Immagine del contenitore di SQL Server in Linux.

Visualizzare l’elenco dei contenitori

  1. Per visualizzare i contenitori di Docker, usare il comando docker ps.

    docker ps -a
    
    docker ps -a
    
    docker ps -a
    

    L'output dovrebbe essere simile all'esempio seguente:

    CONTAINER ID   IMAGE                                        COMMAND                    CREATED         STATUS         PORTS                                       NAMES
    d4a1999ef83e   mcr.microsoft.com/mssql/server:2019-latest   "/opt/mssql/bin/perm..."   2 minutes ago   Up 2 minutes   0.0.0.0:1433->1433/tcp, :::1433->1433/tcp   sql1
    
  2. Se nella colonna STATUS è impostato lo stato Up, SQL Server è in esecuzione nel contenitore e in ascolto sulla porta specificata nella colonna PORTS. Se la colonna STATUS del contenitore di SQL Server è impostata su Exited, vedi la Risoluzione dei problemi dei contenitori Docker di SQL Server. Il server è pronto per le connessioni quando i log degli errori di SQL Server visualizzano questo messaggio: SQL Server is now ready for client connections. This is an informational message; no user action is required. È possibile esaminare il log degli errori di SQL Server all'interno del contenitore usando il comando seguente:

    docker exec -t sql1 cat /var/opt/mssql/log/errorlog | grep connection
    

    Il parametro --hostname illustrato in precedenza sostituisce il nome interno del contenitore con un valore personalizzato. Questo valore è il nome che viene restituito nella query Transact-SQL seguente:

    SELECT @@SERVERNAME,
        SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
        SERVERPROPERTY('MachineName'),
        SERVERPROPERTY('ServerName');
    

    L'impostazione di --hostname e --name sullo stesso valore è un buon modo per identificare facilmente il contenitore di destinazione.

  3. Come passaggio finale, cambia la password dell'amministratore di sistema in un ambiente di produzione, perché il valore di MSSQL_SA_PASSWORD è visibile nell'output di ps -eax e viene archiviato nella variabile di ambiente con lo stesso nome.

Effettuare il pull ed eseguire l'immagine del contenitore di SQL Server in Linux

Prima di iniziare la procedura seguente, assicurati di aver selezionato la shell preferita (Bash, PowerShell o cmd) all'inizio di questo articolo.

Per i comandi Bash in questo articolo, si usa sudo. Se non si vuole usare sudo per eseguire Docker, è possibile configurare un gruppo docker e aggiungere utenti a tale gruppo. Per altre informazioni, vedere Post-installation steps for Linux (Passaggi post-installazione per Linux).

Eseguire il pull del contenitore dal registro

Esegui il pull dell'immagine del contenitore di SQL Server 2022 (16.x) in Linux dal Registro Container Microsoft.

docker pull mcr.microsoft.com/mssql/server:2022-latest
docker pull mcr.microsoft.com/mssql/server:2022-latest
docker pull mcr.microsoft.com/mssql/server:2022-latest

In questa guida di avvio rapido vengono creati contenitori di SQL Server 2022 (16.x). Se si preferisce creare contenitori Linux per versioni diverse di SQL Server, vedere le versioni SQL Server 2017 (14.x) o SQL Server 2019 (15.x) di questo articolo.

Il comando riportato sopra esegue il pull dell'immagine del contenitore di SQL Server 2022 (16.x) in Linux più recente. Se si vuole eseguire il pull di un'immagine specifica, aggiungere un segno di due punti e il nome del tag, ad esempio mcr.microsoft.com/mssql/server:2022-GA-ubuntu. Per visualizzare tutte le immagini disponibili, vedi il Registro artefatti Microsoft.

Eseguire il contenitore

Per eseguire l'immagine del contenitore Linux con Docker, è possibile usare il comando seguente da una shell Bash o da un prompt dei comandi PowerShell con privilegi elevati.

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 1433:1433 --name sql1 --hostname sql1 \
   -d \
   mcr.microsoft.com/mssql/server:2022-latest

Se usi PowerShell Core, sostituisci le virgolette doppie con virgolette singole.

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2022-latest

La password deve essere conforme ai criteri password predefiniti di SQL Server, altrimenti il contenitore non può configurare SQL Server e smette di funzionare. Per impostazione predefinita, la password deve essere composta da almeno otto caratteri e contenere caratteri di tre delle quattro categorie seguenti: lettere maiuscole, lettere minuscole, cifre in base 10 e simboli. È possibile esaminare il log degli errori mediante il comando docker logs.

Per impostazione predefinita, in questa guida di avvio rapido viene creato un contenitore con l'edizione Developer di SQL Server. Il processo di esecuzione delle edizioni di produzione nei contenitori è leggermente diverso. Per altre informazioni, vedere Run production container images (Eseguire immagini del contenitore di produzione).

La tabella seguente offre una descrizione dei parametri dell'esempio docker run precedente:

Parametro Descrizione
-e "ACCEPT_EULA=Y" Impostare la variabile ACCEPT_EULA su un valore qualsiasi per confermare l'accettazione del contratto di licenza con l'utente finale. Impostazione obbligatoria per l'immagine di SQL Server.
-e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" Specifica la password complessa composta da almeno otto caratteri e conforme ai criteri password. Impostazione obbligatoria per l'immagine di SQL Server.
-e "MSSQL_COLLATION=<SQL_Server_collation>" Specifica le regole di confronto di SQL Server personalizzate anziché il valore predefinito SQL_Latin1_General_CP1_CI_AS.
-p 1433:1433 Eseguire il mapping di una porta TCP nell'ambiente host (primo valore) con una porta TCP nel contenitore (secondo valore). In questo esempio SQL Server è in ascolto sulla porta TCP 1433 del contenitore e la porta del contenitore è a sua volta esposta alla porta 1433 nell'host.
--name sql1 Specificare un nome personalizzato per il contenitore, invece di un nome generato in modo casuale. Se si eseguono più contenitori, non è possibile riutilizzare lo stesso nome.
--hostname sql1 Usato per impostare in modo esplicito il nome host del contenitore. Se non viene specificato, il valore predefinito del nome host è l'ID contenitore, ovvero un GUID di sistema generato in modo casuale.
-d Esegue il contenitore in background (daemon).
mcr.microsoft.com/mssql/server:2022-latest Immagine del contenitore di SQL Server in Linux.

Cambiare la password dell'amministratore di sistema

L'account SA è un amministratore di sistema dell'istanza di SQL Server creato durante l'installazione. Dopo aver creato il contenitore SQL Server, la variabile di ambiente MSSQL_SA_PASSWORD specificata diventa individuabile eseguendo echo $MSSQL_SA_PASSWORD nel contenitore. Per motivi di sicurezza, è necessario modificare la password dell'amministratore di sistema in un ambiente di produzione.

  1. Scegliere una password complessa da usare per l'utente SA.

  2. Usare docker exec per eseguire sqlcmd per modificare la password usando Transact-SQL. Nell'esempio seguente, la password precedente e quella nuova vengono lette dall'input dell'utente.

    docker exec -it sql1 /opt/mssql-tools18/bin/sqlcmd \
    -S localhost -U SA \
     -P "$(read -sp "Enter current SA password: "; echo "${REPLY}")" \
     -Q "ALTER LOGIN SA WITH PASSWORD=\"$(read -sp "Enter new SA password: "; echo "${REPLY}")\""
    
    docker exec -it sql1 /opt/mssql-tools18/bin/sqlcmd `
       -S localhost -U SA -P "<YourStrong@Passw0rd>" `
       -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
    
    docker exec -it sql1 /opt/mssql-tools18/bin/sqlcmd `
       -S localhost -U SA -P "<YourStrong@Passw0rd>" `
       -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
    

    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 riesce, è possibile aggiungere l'opzione -No a sqlcmd per specificare che la crittografia è facoltativa, non obbligatoria.

Disabilitare l'account sa come procedura consigliata

Importante

Queste credenziali saranno necessarie per i passaggi successivi. Assicurati di annotare l'ID utente e la password immessi qui.

Quando ci si connette all'istanza di SQL Server usando l'account sa per la prima volta dopo l'installazione, è importante seguire questi passaggi e quindi disabilitare immediatamente l'account di accesso sa come procedura consigliata per la sicurezza.

  1. Creare un nuovo account di accesso e impostarlo come membro del ruolo del server sysadmin.

  2. Connessione all'istanza di SQL Server usando il nuovo account di accesso creato.

  3. Disabilita l'account sa, come consigliato per la procedura consigliata per la sicurezza.

Visualizzare l’elenco dei contenitori

  1. Per visualizzare i contenitori di Docker, usare il comando docker ps.

    docker ps -a
    
    docker ps -a
    
    docker ps -a
    

    L'output dovrebbe essere simile all'esempio seguente:

    CONTAINER ID   IMAGE                                        COMMAND                    CREATED         STATUS         PORTS                                       NAMES
    d4a1999ef83e   mcr.microsoft.com/mssql/server:2022-latest   "/opt/mssql/bin/perm..."   2 minutes ago   Up 2 minutes   0.0.0.0:1433->1433/tcp, :::1433->1433/tcp   sql1
    
  2. Se nella colonna STATUS è impostato lo stato Up, SQL Server è in esecuzione nel contenitore e in ascolto sulla porta specificata nella colonna PORTS. Se la colonna STATUS del contenitore di SQL Server è impostata su Exited, vedi la Risoluzione dei problemi dei contenitori Docker di SQL Server. Il server è pronto per le connessioni quando i log degli errori di SQL Server visualizzano questo messaggio: SQL Server is now ready for client connections. This is an informational message; no user action is required. È possibile esaminare il log degli errori di SQL Server all'interno del contenitore usando il comando seguente:

    docker exec -t sql1 cat /var/opt/mssql/log/errorlog | grep connection
    

    Il parametro --hostname illustrato in precedenza sostituisce il nome interno del contenitore con un valore personalizzato. Questo valore è il nome che viene restituito nella query Transact-SQL seguente:

    SELECT @@SERVERNAME,
        SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
        SERVERPROPERTY('MachineName'),
        SERVERPROPERTY('ServerName');
    

    L'impostazione di --hostname e --name sullo stesso valore è un buon modo per identificare facilmente il contenitore di destinazione.

Connessione a SQL Server

La procedura seguente usa lo strumento da riga di comando di SQL Server, utilità sqlcmd, all'interno del contenitore per stabilire la connessione a SQL Server.

  1. Usare il comando docker exec -it per avviare una shell Bash interattiva all'interno del contenitore in esecuzione. Nell'esempio seguente, sql1 è il nome specificato dal parametro --name quando è stato creato il contenitore.

    docker exec -it sql1 "bash"
    
    docker exec -it sql1 "bash"
    
    docker exec -it sql1 "bash"
    
  1. 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 <userid> -P "<YourNewStrong@Passw0rd>"
    

    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 riesce, è possibile aggiungere l'opzione -No a sqlcmd per specificare che la crittografia è facoltativa, non obbligatoria.

    È possibile omettere la password nella riga di comanda perché sia richiesto di essere immessa. Ad esempio:

    /opt/mssql-tools/bin/sqlcmd -S localhost -U <userid>
    
  1. 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 <userid> -P "<YourNewStrong@Passw0rd>"
    

    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 riesce, è possibile aggiungere l'opzione -No a sqlcmd per specificare che la crittografia è facoltativa, non obbligatoria.

    È possibile omettere la password nella riga di comanda perché sia richiesto di essere immessa. Ad esempio:

    /opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid>
    
  1. 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 <userid> -P "<YourNewStrong@Passw0rd>"
    

    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 riesce, è possibile aggiungere l'opzione -No a sqlcmd per specificare che la crittografia è facoltativa, non obbligatoria.

    È possibile omettere la password nella riga di comanda perché sia richiesto di essere immessa. Ad esempio:

    /opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid>
    
  1. Se la connessione viene eseguita correttamente, il prompt dei comandi sqlcmd sarà: 1>.

Creare i dati e recuperarli tramite query

Nelle sezioni seguenti viene descritto l'uso di sqlcmd e Transact-SQL per creare un nuovo database, aggiungere dati ed eseguire una query.

Creare un nuovo database

La seguente procedura consente di creare un nuovo database denominato TestDB.

  1. Dal prompt dei comandi sqlcmd incollare il comando seguente di Transact-SQL per creare un database di test:

    CREATE DATABASE TestDB;
    
  2. Nella riga successiva scrivere una query perché vengano restituiti i nomi di tutti database nel server:

    SELECT Name from sys.databases;
    
  3. I due comandi precedenti non sono stati eseguiti immediatamente. Digitare GO in una nuova riga per eseguire i comandi precedenti:

    GO
    

Inserire i dati

Creare poi una nuova tabella Inventory e inserire due nuove righe.

  1. Dal prompt dei comandi sqlcmd spostare il contesto nel nuovo database TestDB:

    USE TestDB;
    
  2. Creare una nuova tabella denominata Inventory:

    CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT);
    
  3. Inserire i dati nella nuova tabella:

    INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
    
  4. Digitare GO per eseguire i comandi precedenti:

    GO
    

Selezionare i dati

A questo punto, eseguire una query per restituire i dati dalla tabella Inventory.

  1. Dal prompt dei comandi sqlcmd immettere una query che restituisca le righe dalla tabella Inventory che ne contiene oltre 152:

    SELECT * FROM Inventory WHERE quantity > 152;
    
  2. Eseguire il comando :

    GO
    

Uscire dal prompt dei comandi sqlcmd

  1. Per terminare la sessione sqlcmd, digitare QUIT:

    QUIT
    
  2. Per uscire dal prompt dei comandi interattivo nel contenitore, digitare exit. Dopo la chiusura della shell Bash interattiva, il contenitore continua l'esecuzione.

Connettersi dall'esterno del contenitore

È anche possibile connettersi all'istanza di SQL Server nel computer che esegue Docker da uno strumento esterno Linux, Windows o macOS che supporti le connessioni SQL. Lo strumento esterno usa l'indirizzo IP per il computer host.

La procedura seguente usa sqlcmd all'esterno del contenitore per stabilire la connessione a SQL Server in esecuzione nel contenitore. Questa procedura presuppone che gli strumenti da riga di comando di SQL Server siano già installati all'esterno del contenitore. Gli stessi principi valgono quando si usano altri strumenti, ma il processo di connessione è specifico di ogni strumento.

  1. Trovare l'indirizzo IP del computer host del contenitore usando ifconfig o ip addr.

  2. Per questo esempio, installare lo strumento sqlcmd nel computer client. Per altre informazioni, vedi Utilità sqlcmd o Installare gli strumenti da riga di comando di SQL Server sqlcmd e bcp in Linux.

  3. Eseguire sqlcmd specificando l'indirizzo IP e la porta mappata alla porta 1433 nel contenitore. In questo esempio la porta corrisponde alla porta 1433 nel computer host. Se si è specificata una porta con mapping diverso nel computer host, è possibile usarla qui. È necessario anche aprire la porta in ingresso appropriata nel firewall per consentire la connessione.

    Le versioni più recenti di sqlcmd sono protette per impostazione predefinita. Se la connessione non riesce e si usa la versione 18 o successiva, è possibile aggiungere l'opzione -No a sqlcmd per specificare che la crittografia è facoltativa, non obbligatoria.

    sudo sqlcmd -S <ip_address>,1433 -U <userid> -P "<YourNewStrong@Passw0rd>"
    
    sqlcmd -S <ip_address>,1433 -U <userid> -P "<YourNewStrong@Passw0rd>"
    
    sqlcmd -S <ip_address>,1433 -U <userid> -P "<YourNewStrong@Passw0rd>"
    
  4. Eseguire i comandi Transact-SQL. Al termine, digitare QUIT.

Altri strumenti usati comunemente per connettersi a SQL Server sono:

Rimuovere il contenitore

Se si vuole rimuovere il contenitore di SQL Server usato in questa esercitazione, eseguire i comandi seguenti:

docker stop sql1
docker rm sql1
docker stop sql1
docker rm sql1
docker stop sql1
docker rm sql1

Demo di Docker

Se, dopo aver usato l'immagine del contenitore di SQL Server in Linux per Docker, si vuole sapere come si può usare Docker per migliorare le attività di sviluppo e test, il video seguente illustra l'uso di Docker in uno scenario di integrazione continua e distribuzione.

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