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:
- Executar a imagem de contêiner do SQL Server 2017 com o Docker
- Executar a imagem de contêiner do SQL Server 2019 com o Docker
- Executar a imagem de contêiner do SQL Server 2022 com o Docker
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.
Use o comando
docker exec -it
para iniciar um shell bash interativo dentro do contêiner em execução. No exemploe69e056c702d
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
oue69
, em vez da ID completa. Para descobrir a ID do contêiner, execute o comandodocker ps -a
.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.Quando terminar com o sqlcmd, digite
exit
.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).
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.
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
- 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:
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.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 por2019-CU18-ubuntu-20.04
.docker pull mcr.microsoft.com/mssql/server:<image_tag>
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. UseMSSQL_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:
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.
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.
Interrompa o contêiner do SQL Server com o comando
docker stop
.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.
Verifique os bancos de dados e os dados no novo contêiner.
Opcionalmente, remova o contêiner antigo com
docker rm
.
Conteúdo relacionado
- 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
- Referenciar uma configuração e uma personalização adicionais em contêineres do Docker
- Confira o repositório GitHub mssql-docker para obter recursos e comentários e problemas conhecidos
- Solução de problemas de contêineres do SQL Server no Docker
- Explorar alta disponibilidade para contêineres do SQL Server
- Proteger contêineres do SQL Server no Docker
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