Implantar contêineres do SQL Server no Linux e conectar-se a eles

Aplica-se a:SQL Server – Linux

Este artigo explica como implantar contêineres do SQL Server no Linux e se conectar a eles.

Para ver outros cenários de implantação, confira:

Observação

Este artigo concentra-se especificamente no uso da imagem mssql-server-linux. As implantações do SQL Server implantações em contêineres de Windows não são cobertas pelo suporte. Para desenvolvimento e teste, você pode criar suas próprias imagens de contêiner personalizadas para trabalhar com o SQL Server em contêineres de Windows. Arquivos de amostra estão disponíveis no GitHub. Arquivos de exemplo são apenas para referência.

Importante

Antes de escolher executar um contêiner de SQL Server para casos de uso de produção, examine nossa política de suporte para Contêineres do SQL Server para certificar-se de que você está executando uma configuração com suporte.

Este vídeo de 6 minutos fornece uma introdução à execução do SQL Server em contêineres:

Efetuar pull e executar a imagem de contêiner

Para efetuar pull e executar as imagens de contêiner do Docker para SQL Server, siga os pré-requisitos e as etapas no seguinte início rápido:

Este artigo de configuração apresenta cenários de uso adicionais nas seções a seguir.

Conectar e consultar

Você pode se conectar e consultar o SQL Server em um contêiner de fora ou de dentro do contêiner. As seções a seguir explicam os dois cenários.

Ferramentas fora do contêiner

Você pode se conectar à instância do SQL Server em seu host de contêiner usando qualquer ferramenta externa do macOS, do Windows ou do Linux que seja compatível com conexões SQL. Algumas ferramentas comuns incluem:

O exemplo a seguir usa o sqlcmd para conectar-se ao SQL Server em execução em um contêiner. O endereço IP na cadeia de conexão é o endereço IP do computador host que está executando o contêiner.

Observação

As versões mais recentes do sqlcmd (em mssql-tools18) são seguras por padrão. Se estiver usando a versão 18 ou superior, você precisará adicionar a opção No ao sqlcmd para especificar que a criptografia é opcional, não obrigatória.

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 você tiver mapeado uma porta de host que não era a porta padrão 1433, adicione essa porta à cadeia de conexão. Por exemplo, se você especificar -p 1400:1433 em seu comando docker run, conecte-se explicitamente especificando a 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>"

Ferramentas dentro do contêiner

Do SQL Server 2017 (14.x), as ferramentas de linha de comando SQL Server são incluídas na imagem de contêiner. Se você anexar a imagem com um prompt de comando interativo, poderá executar as ferramentas localmente.

  1. Use o comando docker exec -it para iniciar um shell bash interativo dentro do contêiner em execução. No exemplo e69e056c702d a seguir está é a ID do contêiner.

    docker exec -it e69e056c702d "bash"
    

    Dica

    Você nem sempre precisa especificar toda a ID do contêiner. Você só precisa especificar caracteres suficientes para identificá-la exclusivamente. Portanto, neste exemplo, talvez seja suficiente usar e6 ou e69, em vez da ID completa. Para descobrir a ID do contêiner, execute o comando docker ps -a.

  2. Uma vez dentro do contêiner, conecte-se localmente com o sqlcmd usando seu caminho completo.

    /opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P '<YourPassword>'
    

    Observação

    As versões mais recentes do sqlcmd são seguras por padrão. Para obter mais informações sobre a criptografia de conexão, confira Utilitário sqlcmd para Windows e Conectar com sqlcmd para Linux e macOS. Se a conexão não for bem-sucedida, você poderá adicionar a opção -No ao sqlcmd para especificar que a criptografia é opcional, não obrigatória.

  3. Quando terminar com o sqlcmd, digite exit.

  4. Quando terminar com o prompt de comando interativo, digite exit. O contêiner continuará a ser executado depois que você sair do shell bash interativo.

Verificar a versão do contêiner

Se você quiser saber a versão do SQL Server em um contêiner em execução, use o comando a seguir para exibi-la. Substitua <Container ID or name> pela ID ou pelo nome do contêiner de destino. Substitua <YourStrong!Passw0rd> com a senha do SQL Server para a conta do SA (administrador do sistema).

sudo docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P '<YourStrong!Passw0rd>' \
-Q 'SELECT @@VERSION'

Observação

As versões mais recentes do sqlcmd são seguras por padrão. Para obter mais informações sobre a criptografia de conexão, confira Utilitário sqlcmd para Windows e Conectar com sqlcmd para Linux e macOS. Se a conexão não for bem-sucedida, você poderá adicionar a opção -No ao sqlcmd para especificar que a criptografia é opcional, não obrigatória.

docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd `
-S localhost -U SA -P "<YourStrong!Passw0rd>" `
-Q "SELECT @@VERSION"

Observação

As versões mais recentes do sqlcmd são seguras por padrão. Para obter mais informações sobre a criptografia de conexão, confira Utilitário sqlcmd para Windows e Conectar com sqlcmd para Linux e macOS. Se a conexão não for bem-sucedida, você poderá adicionar a opção -No ao sqlcmd para especificar que a criptografia é opcional, não obrigatória.

docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd ^
-S localhost -U SA -P "<YourStrong!Passw0rd>" ^
-Q "SELECT @@VERSION"

Observação

As versões mais recentes do sqlcmd são seguras por padrão. Para obter mais informações sobre a criptografia de conexão, confira Utilitário sqlcmd para Windows e Conectar com sqlcmd para Linux e macOS. Se a conexão não for bem-sucedida, você poderá adicionar a opção -No ao sqlcmd para especificar que a criptografia é opcional, não obrigatória.

Você também pode identificar a versão e o número de build do SQL Server para uma imagem de contêiner de destino. O comando a seguir exibe a versão do SQL Server e as informações de build da imagem mcr.microsoft.com/mssql/server:2022-latest. Ele faz isso executando um novo contêiner com uma variável de ambiente PAL_PROGRAM_INFO=1. O contêiner resultante é fechado instantaneamente e o comando docker rm o remove.

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

Os comandos anteriores exibem informações de versão semelhantes à seguinte saída:

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

Executar uma imagem de contêiner específica do SQL Server

Observação

  • Do SQL Server 2019 (15.x) CU3 em diante, há suporte para Ubuntu 18.04.
  • Do SQL Server 2019 (15.x) CU10 em diante, há suporte para Ubuntu 20.04.
  • Recupere uma lista de todas as marcas disponíveis para mssql/server em https://mcr.microsoft.com/v2/mssql/server/tags/list.

Há cenários em que você talvez não queira usar a imagem de contêiner do SQL Server mais recente. Para executar uma imagem de contêiner do SQL Server específica, use as seguintes etapas:

  1. Identifique a tag do Docker para a versão que você deseja usar. Para ver todas as tags disponíveis, consulte o Registro de Artefato da Microsoft.

  2. Efetue pull da imagem de contêiner do SQL Server com a tag. Por exemplo, para efetuar pull da imagem 2019-CU18-ubuntu-20.04, substitua <image_tag> no comando a seguir por 2019-CU18-ubuntu-20.04.

    docker pull mcr.microsoft.com/mssql/server:<image_tag>
    
  3. Para executar um novo contêiner com essa imagem, especifique o nome da tag no comando docker run. No comando a seguir, substitua <image_tag> pela versão que você deseja executar.

    Importante

    A variável de ambiente SA_PASSWORD foi preterida. Use MSSQL_SA_PASSWORD em vez disso.

    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>
    

Essas etapas também podem ser usadas para fazer downgrade de um contêiner existente. Por exemplo, talvez você queira reverter ou fazer downgrade de um contêiner em execução para solução de problemas ou teste. Para fazer downgrade de um contêiner em execução, você deve estar usando uma técnica de persistência para a pasta de dados. Siga as mesmas etapas descritas na seção de atualização, mas especifique o nome da tag da versão mais antiga ao executar o novo contêiner.

Executar imagens de contêiner baseadas em RHEL

A documentação para as imagens de contêiner do SQL Server Linux apontam para contêineres baseados em Ubuntu. Do SQL Server 2019 (15.x) em diante, você pode usar contêineres com base em RHEL (Red Hat Enterprise Linux). Um exemplo da imagem para RHEL será semelhante a mcr.microsoft.com/mssql/rhel/server:2019-CU15-rhel-8.

Por exemplo, o seguinte comando efetua pull da Atualização Cumulativa 18 do contêiner do SQL Server 2019 (15.x) que usa o 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

Executar imagens de contêiner de produção

O guia de início rápido da seção anterior executa a edição Developer gratuita do SQL Server no Registro de Artefato da Microsoft. A maioria das informações ainda se aplica se você deseja executar imagens de contêiner de produção, como as edições Enterprise, Standard ou Web. No entanto, há algumas diferenças descritas aqui.

  • Você só poderá usar o SQL Server em um ambiente de produção se tiver uma licença válida. Você pode obter uma licença de produção do SQL Server Express gratuita aqui. As licenças do SQL Server Standard e do Enterprise Edition estão disponíveis por meio do Licenciamento por Volume da Microsoft.

  • A imagem de contêiner da edição Developer também pode ser configurada para executar as edições de produção.

Para executar uma edição de produção, examine os requisitos e execute os procedimentos do início rápido. Você deve especificar sua edição de produção com a variável de ambiente MSSQL_PID. O exemplo a seguir mostra como executar a imagem de contêiner mais recente do SQL Server 2022 (16.x) para o Enterprise Core Edition.

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

Ao passar o valor Y para a variável de ambiente ACCEPT_EULA e um valor de edição para MSSQL_PID, você está expressando que tem uma licença válida e existente para a edição e a versão do SQL Server que você pretende usar. Você também concorda que o uso do software SQL Server em execução em uma imagem de contêiner será regido pelos termos da sua licença do SQL Server.

Observação

Para obter uma lista completa de valores possíveis para o MSSQL_PID, confira Definir configurações do SQL Server com variáveis de ambiente no Linux.

Executar vários contêineres do SQL Server

O Docker fornece uma maneira de executar vários contêineres do SQL Server no mesmo computador host. Use essa abordagem para cenários que exigem várias instâncias do SQL Server no mesmo host. Cada contêiner deve expor-se em uma porta diferente.

O exemplo a seguir cria dois contêineres SQL Server 2017 (14.x) e os mapeia para as portas 1401 e 1402 no computador 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

O exemplo a seguir cria dois contêineres SQL Server 2019 (15.x) e os mapeia para as portas 1401 e 1402 no computador 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

O exemplo a seguir cria dois contêineres do SQL Server 2022 (16.x) e os mapeia nas portas 1401 e 1402 do computador 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

Agora, há duas instâncias do SQL Server em execução em contêineres separados. Os clientes podem se conectar a cada instância do SQL Server usando o endereço IP do host do contêiner e o número da porta do contêiner.

Observação

As versões mais recentes do sqlcmd (em mssql-tools18) são seguras por padrão. Se estiver usando a versão 18 ou superior, você precisará adicionar a opção No ao sqlcmd para especificar que a criptografia é opcional, não obrigatória.

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

Atualizar o SQL Server em contêineres

Para atualizar a imagem de contêiner com o Docker, primeiro identifique a tag de versão para a atualização. Receba esta versão do Registro com o comando docker pull:

docker pull mcr.microsoft.com/mssql/server:<image_tag>

Isso atualiza a imagem do SQL Server para os novos contêineres criados, mas não atualiza o SQL Server em nenhum contêiner em execução. Para fazer isso, você deve criar um novo contêiner com a imagem de contêiner mais recente do SQL Server e migrar os dados para esse novo contêiner.

  1. Verifique se você está usando uma das técnicas de persistência de dados para o contêiner do SQL Server existente. Isso permite que você inicie um novo contêiner com os mesmos dados.

  2. Interrompa o contêiner do SQL Server com o comando docker stop.

  3. Crie um novo contêiner do SQL Server com docker run e especifique um diretório de host mapeado ou um contêiner de volume de dados. Use a tag específica para a atualização do SQL Server. O novo contêiner agora usa uma nova versão do SQL Server com os dados existentes do SQL Server.

    Importante

    Há suporte para a atualização apenas entre RC1, RC2 e GA no momento.

  4. Verifique os bancos de dados e os dados no novo contêiner.

  5. Opcionalmente, remova o contêiner antigo com docker rm.

  • Comece a usar as imagens de contêiner do SQL Server 2017 (14.x) no Docker acompanhando o guia de início rápido
  • Comece a usar as imagens de contêiner do SQL Server 2019 (15.x) no Docker acompanhando o guia de início rápido
  • Comece a usar as imagens de contêiner do SQL Server 2022 (16.x) no Docker acompanhando o guia de início rápido

Contribua com a documentação do SQL

Você sabia que pode editar conteúdo do SQL por conta própria? Ao fazer isso, além de melhorar nossa documentação, você também será creditado como um colaborador da página.

Para obter mais informações, confira Como contribuir para a documentação do SQL Server