Partilhar via


Implantar e conectar contentores Linux do SQL Server

Aplica-se a:SQL Server - Linux

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

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

Observação

Este artigo se concentra especificamente no uso da imagem mssql-server-linux. As implantações do SQL Server em contêineres do 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 do Windows. Arquivos de exemplo estão disponíveis em GitHub. Os arquivos de exemplo são apenas para referência.

Importante

Antes de optar por executar um contêiner do SQL Server para casos de uso de produção, revise a política de suporte técnico para o Microsoft SQL Server para garantir que você esteja executando em uma configuração com suporte.

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

Puxe e execute a imagem do contêiner

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

Este artigo de configuração fornece 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 ambos os cenários.

Ferramentas fora do contentor

Você pode se conectar à instância do SQL Server em seu host de contêiner a partir de qualquer ferramenta externa do Linux, Windows ou macOS que ofereça suporte a conexões SQL. Algumas ferramentas comuns incluem:

O exemplo a seguir usa sqlcmd para se conectar ao SQL Server em execução em um contêiner. O endereço IP na cadeia de conexão é o endereço IP da máquina 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 a 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ê mapeou uma porta de host que não era a 1433padrão, adicione essa porta à cadeia de conexão. Por exemplo, se você especificou -p 1400:1433 no comando docker run, conecte-se especificando explicitamente 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 recipiente

A partir do SQL Server 2017 (14.x), as ferramentas de linha de comando do SQL Server são incluídas na imagem do contêiner. Se se ligar à imagem com uma linha de comando interativa, 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 a seguir, e69e056c702d é a ID do contêiner.

    docker exec -it e69e056c702d "bash"
    

    Dica

    Nem sempre é necessário especificar o ID do contêiner inteiro. Só precisa indicar caracteres suficientes para o identificar de forma única. Portanto, neste exemplo, pode ser suficiente usar e6 ou e69 em vez do ID completo. Para descobrir o ID do contêiner, execute o comando docker ps -a.

  2. Uma vez dentro do contentor, conecte-se localmente com sqlcmd usando o 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 criptografia de conexão, consulte utilitário sqlcmd para Windows e Conectando-se com sqlcmd para Linux e macOS. Se a conexão não for bem-sucedida, você poderá adicionar a opção -No a sqlcmd para especificar que a criptografia é opcional, não obrigatória.

  3. Quando terminar sqlcmd , digite exit.

  4. Quando terminar o prompt de comando interativo, digite exit. Seu contêiner continua a ser executado depois que você sai do shell bash interativo.

Verifique a versão do contêiner

Se você quiser saber a versão do SQL Server em um contêiner em execução, execute o seguinte comando para exibi-lo. Substitua <Container ID or name> pelo ID ou nome do contêiner de destino. Substitua <password> pela senha do SQL Server para a conta de administrador do sistema (sa).

docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd \
-S localhost -U sa -P '<password>' \
-Q 'SELECT @@VERSION'

Observação

As versões mais recentes do sqlcmd são seguras por padrão. Para obter mais informações sobre criptografia de conexão, consulte utilitário sqlcmd para Windows e Conectando-se com sqlcmd para Linux e macOS. Se a conexão não for bem-sucedida, você poderá adicionar a opção -No a 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 "<password>" `
-Q "SELECT @@VERSION"

Observação

As versões mais recentes do sqlcmd são seguras por padrão. Para obter mais informações sobre criptografia de conexão, consulte utilitário sqlcmd para Windows e Conectando-se com sqlcmd para Linux e macOS. Se a conexão não for bem-sucedida, você poderá adicionar a opção -No a 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 "<password>" ^
-Q "SELECT @@VERSION"

Observação

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

Você também pode identificar a versão do SQL Server e o número de compilação para uma imagem de contêiner de destino. O comando a seguir exibe a versão do SQL Server e as informações de compilação para a 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 sai instantaneamente, e o comando docker rm o remove.

docker run -e PAL_PROGRAM_INFO=1 --name sqlver \
-ti mcr.microsoft.com/mssql/server:2022-latest && \
docker rm sqlver
docker run -e PAL_PROGRAM_INFO=1 --name sqlver `
-ti mcr.microsoft.com/mssql/server:2022-latest; `
docker rm sqlver
docker run -e PAL_PROGRAM_INFO=1 --name sqlver ^
-ti mcr.microsoft.com/mssql/server:2022-latest && ^
docker rm sqlver

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

  • A partir do SQL Server 2019 (15.x) CU3, o Ubuntu 18.04 é suportado.
  • A partir do SQL Server 2019 (15.x) CU10, o Ubuntu 20.04 é suportado.
  • Você pode recuperar uma lista de todas as tags disponíveis para mssql/server em https://mcr.microsoft.com/v2/mssql/server/tags/list.

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

  1. Identifique o tag do Docker para a versão que você deseja usar. Para exibir as tags disponíveis, consulte o Microsoft Artifact Registry.

  2. Faça o download da imagem de contêiner do SQL Server com a tag. Por exemplo, para puxar a 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 contentor com essa imagem, especifique o nome da etiqueta no comando docker run. No comando a seguir, substitua <image_tag> pela versão que você deseja executar. A sua senha deve seguir a política de senha padrão do SQL Server. Por padrão, a senha deve ter pelo menos oito caracteres e conter caracteres de três dos quatro conjuntos a seguir: letras maiúsculas, letras minúsculas, dígitos de base 10 e símbolos. As palavras-passe podem ter até 128 caracteres. Use senhas tão longas e complexas quanto possível.

    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=<password>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -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 quando executar o novo contêiner.

Executar imagens de contêiner baseadas em RHEL

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

Por exemplo, o comando a seguir extrai o contêiner da Atualização Cumulativa 18 para SQL Server 2019 (15.x) que usa o RHEL 8:

docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU18-rhel-8.4
docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU18-rhel-8.4
docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU18-rhel-8.4

Executar imagens de contêiner de produção

O de início rápido na seção anterior executa a edição gratuita do Developer do SQL Server a partir do Microsoft Artifact Registry. A maioria das informações ainda se aplica se você quiser executar imagens de contêiner de produção, como edições Enterprise, Standard ou Web. No entanto, existem algumas diferenças que são descritas aqui.

  • Você só pode 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 gratuita do SQL Server Express aqui. As licenças do SQL Server Standard e Enterprise Edition estão disponíveis por meio Microsoft Volume Licensing.

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

Para executar uma edição de produção, reveja os requisitos e execute os procedimentos no guia de 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 a edição Enterprise Core.

Sua senha deve seguir a política de senha de padrão do SQL Server. Por padrão, a senha deve ter pelo menos oito caracteres e conter caracteres de três dos quatro conjuntos a seguir: letras maiúsculas, letras minúsculas, dígitos de base 10 e símbolos. As palavras-passe podem ter até 128 caracteres. Use senhas tão longas e complexas quanto possível.

docker run --name sqlenterprise \
-e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-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=<password>" `
-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=<password>" ^
-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ê expressa que tem uma licença válida e existente para a edição e a versão do SQL Server que pretende usar. Você também concorda que seu uso do software SQL Server em execução em uma imagem de contêiner será regido pelos termos de sua licença do SQL Server.

Para obter uma lista completa de valores possíveis para MSSQL_PID, consulte Configurar 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 na mesma máquina host. Use essa abordagem para cenários que exigem várias instâncias do SQL Server no mesmo host. Cada contêiner deve se expor em uma porta diferente.

O exemplo a seguir cria dois contêineres do SQL Server 2017 (14.x) e os mapeia para portas 1401 e 1402 na máquina host.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest

O exemplo a seguir cria dois contêineres do SQL Server 2019 (15.x) e os mapeia para portas 1401 e 1402 na máquina host.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -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 para portas 1401 e 1402 na máquina host.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest

Atenção

A sua palavra-passe deve seguir a política de palavra-passe padrão do SQL Server . Por padrão, a senha deve ter pelo menos oito caracteres e conter caracteres de três dos quatro conjuntos a seguir: letras maiúsculas, letras minúsculas, dígitos de base 10 e símbolos. As palavras-passe podem ter até 128 caracteres. Use senhas tão longas e complexas quanto possível.

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 a 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 do contêiner com o Docker, primeiro identifique a tag da versão para sua atualização. Puxe 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 quaisquer novos contêineres que você criar, 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 seus dados para esse novo contêiner.

  1. Certifique-se de usar uma das técnicas de persistência de dados para seu contêiner existente do SQL Server. Isso permite que você inicie um novo contêiner com os mesmos dados.

  2. Pare 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. Certifique-se de usar 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 seus dados existentes do SQL Server.

    Importante

    No momento, a atualização só é suportada entre RC1, RC2 e GA.

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

  5. Remova opcionalmente o recipiente antigo com docker rm.

  • Comece a utilizar imagens de contentores do SQL Server 2017 (14.x) no Docker segundo o guia de início rápido .
  • Comece a usar as imagens de container do SQL Server 2019 (15.x) no Docker, seguindo o guia de início rápido
  • Comece a usar as imagens de contêiner do SQL Server 2022 (16.x) no Docker passando pelo de início rápido

Contribuir para a documentação SQL

Você sabia que você mesmo pode editar conteúdo SQL? Se o fizer, não só ajudará a melhorar a nossa documentação, como também será creditado como contribuidor da página.

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