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

Suggerimento

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

In questa guida di avvio rapido si userà 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.

Suggerimento

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

In questa guida introduttiva si userà Docker per eseguire il pull ed eseguire l'immagine del contenitore Linux SQL Server 2022 (16.x) 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 (16.x) in Linux.

Suggerimento

Questa guida introduttiva crea SQL Server contenitori 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 20.04. Può essere usata con il motore Docker 1.8 o versioni successive su Linux.

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.

Prerequisiti

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

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

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

    Suggerimento

    In questa guida di avvio rapido vengono creati contenitori di SQL Server 2017 (14.x). Se si preferisce creare contenitori Linux per versioni diverse di SQL Server, vedere 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, vedere la pagina dell'hub Docker su mssql-server.

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

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

    Nota

    Se si usa PowerShell Core, sostituire 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 potrà configurare SQL Server e smetterà 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>" Specificare la password complessa composta da almeno otto caratteri e conforme ai requisiti per le password di SQL Server. Impostazione obbligatoria per l'immagine di SQL Server.
    -e "MSSQL_COLLATION=<SQL_Server_collation>" Specificare le regole di confronto personalizzate SQL Server anziché il valore predefinitoSQL_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.
  3. 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 al 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
    
  4. Se nella colonna STATUS è impostato lo statoUp, 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, vedere la sezione relativa alla risoluzione dei problemi della guida alla configurazione. 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.

  5. Come passaggio finale, cambiare la password dell'amministratore di sistema, perché il valore di MSSQL_SA_PASSWORD è visibile nell'output di ps -eax e viene archiviato nella variabile di ambiente con lo stesso nome. Vedere i passaggi seguenti.

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

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

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

    sudo 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
    

    Suggerimento

    In questa guida di avvio rapido vengono creati contenitori di SQL Server 2019 (15.x). Se si preferisce creare contenitori Linux per versioni diverse di SQL Server, vedere 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, vedere la pagina dell'hub Docker su mssql-server.

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

  2. 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. Usare 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:2019-latest
    

    Nota

    Se si usa PowerShell Core, sostituire 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 potrà configurare SQL Server e smetterà 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>" Specificare la password complessa composta da almeno otto caratteri e conforme ai requisiti per le password di SQL Server. Impostazione obbligatoria per l'immagine di SQL Server.
    -e "MSSQL_COLLATION=<SQL_Server_collation>" Specificare le regole di confronto personalizzate SQL Server anziché il valore predefinitoSQL_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.
  3. 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 al 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
    
  4. Se nella colonna STATUS è impostato lo statoUp, 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, vedere la sezione relativa alla risoluzione dei problemi della guida alla configurazione. 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.

  5. Come passaggio finale, cambiare la password dell'amministratore di sistema, perché il valore di MSSQL_SA_PASSWORD è visibile nell'output di ps -eax e viene archiviato nella variabile di ambiente con lo stesso nome. Vedere i passaggi seguenti.

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

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

  1. Eseguire il pull dell'immagine del contenitore Linux SQL Server 2022 (16.x) dal Registro Contenitori Microsoft.

    sudo 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
    

    Suggerimento

    Questa guida introduttiva crea SQL Server contenitori 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 precedente esegue il pull dell'immagine del contenitore Linux più recente SQL Server 2022 (16.x). 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, vedere la pagina dell'hub Docker su mssql-server.

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

  2. 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. Usare 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:2022-latest
    

    Nota

    Se si usa PowerShell Core, sostituire 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 potrà configurare SQL Server e smetterà 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>" Specificare la password complessa composta da almeno otto caratteri e conforme ai requisiti per le password di SQL Server. Impostazione obbligatoria per l'immagine di SQL Server.
    -e "MSSQL_COLLATION=<SQL_Server_collation>" Specificare le regole di confronto personalizzate SQL Server anziché il valore predefinitoSQL_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.
  3. 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 al 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
    
  4. Se nella colonna STATUS è impostato lo statoUp, 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, vedere la sezione relativa alla risoluzione dei problemi della guida alla configurazione. 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.

  5. Come passaggio finale, cambiare la password dell'amministratore di sistema, perché il valore di MSSQL_SA_PASSWORD è visibile nell'output di ps -eax e viene archiviato nella variabile di ambiente con lo stesso nome. Vedere i passaggi seguenti.

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, modificare la password dell'amministratore di sistema.

  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.

    sudo docker exec -it sql1 /opt/mssql-tools/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}")\""
    
  1. Scegliere una password complessa da usare per l'utente SA.

  2. Nell'esempio seguente sostituire la vecchia password, <YourStrong@Passw0rd>, e la nuova password, <YourNewStrong@Passw0rd>, con le password personali.

    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd `
       -S localhost -U SA -P "<YourStrong@Passw0rd>" `
       -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
    
  1. Scegliere una password complessa da usare per l'utente SA.

  2. Nell'esempio seguente sostituire la vecchia password, <YourStrong@Passw0rd>, e la nuova password, <YourNewStrong@Passw0rd>, con le password personali.

    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd `
       -S localhost -U SA -P "<YourStrong@Passw0rd>" `
       -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
    

Connessione a SQL Server

La procedura seguente usa lo strumento da riga di comando di SQL Server, 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 --namequando è stato creato il contenitore.

    sudo docker exec -it sql1 "bash"
    
    docker exec -it sql1 "bash"
    
    docker exec -it sql1 "bash"
    
  2. 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 "<YourNewStrong@Passw0rd>"
    

    Suggerimento

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

      /opt/mssql-tools/bin/sqlcmd -S localhost -U SA
    
  3. 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.

Eseguire la connessione 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 userà 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, vedere Installare sqlcmd in Windows o Installare sqlcmd 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. Sarà necessario anche aprire la porta in ingresso appropriata nel firewall per consentire la connessione.

    sqlcmd -S <ip_address>,1433 -U SA -P "<YourNewStrong@Passw0rd>"
    
    sqlcmd -S <ip_address>,1433 -U SA -P "<YourNewStrong@Passw0rd>"
    
    sqlcmd -S <ip_address>,1433 -U SA -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:

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

Avviso

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

Demo di Docker

Se, dopo aver provato a usare 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.

Passaggi successivi

Nel repository GitHub mssql-docker sono inoltre disponibili risorse, feedback e documentazione su problemi noti.