SQL Server em Docker no Linux
[[academy-video-youtube({"vid": "-H5mMexO4_I", "start_time": "0", "title": "SQL Server in Docker on Linux", "creator": "Tim Corey", "length": "18m 20s"})]]
Instalar um motor de banco de dados diretamente em uma máquina de desenvolvimento é um atalho comum que cria problemas de longo prazo. Servidores de banco de dados são projetados para hardware dedicado. Eles consomem memória e CPU significativas, acumulam dívida de configuração à medida que você instala várias versões e complicam atualizações quando você precisa testar contra uma versão diferente. Contêineres Docker resolvem tudo isso isolando cada instância de banco de dados em um ambiente leve e descartável.
Em seu vídeo "SQL Server in Docker on Linux", Tim Corey demonstra como criar uma instância do Microsoft SQL Server no Linux usando um único comando Docker, conectando-se a ele a partir do VS Code e executando consultas contra ele. Ele também mostra como executar múltiplas versões do SQL Server lado a lado e como fazer a limpeza quando terminar. Se você está acompanhando a série C# no Linux ou deseja uma maneira rápida e repetitiva para executar um SQL Server para desenvolvimento, este passo a passo cobre toda a configuração.
Por Que Docker em Vez de uma Instalação Local
[0:00 - 0:57] Tim começa com o caso contra instalações de banco de dados nativo. O argumento principal: motores de banco de dados são projetados para servidores dedicados. Instalá-los localmente significa que consomem recursos, estejam você os utilizando ou não, e gerenciar várias versões (SQL 2019, 2022, 2025) na mesma máquina rapidamente se torna um fardo de manutenção.
Os contêineres Docker invertem este modelo. Cada banco de dados roda em seu próprio ambiente isolado. Inicie-o quando precisar, pare quando não precisar. Exclua e comece do zero sem configuração restante. Para desenvolvimento e testes, esta abordagem é mais rápida de configurar, mais limpa de manter, e mais flexível do que uma instalação tradicional.
Corrigindo a Política de Reinício do Portainer
[0:57 - 2:17] Antes de lançar o SQL Server, Tim percebe que o Portainer (a ferramenta de gestão GUI para contêineres Docker do episódio anterior) não está rodando. Ele saiu quando a máquina foi desligada pela última vez porque nenhuma política de reinício foi definida.
A correção são dois comandos:
// Set Portainer to restart automatically (unless manually stopped)
docker update --restart unless-stopped portainer
// Start it now
docker start portainer
// Set Portainer to restart automatically (unless manually stopped)
docker update --restart unless-stopped portainer
// Start it now
docker start portainer
A política de unless-stopped significa que o Portainer será reiniciado automaticamente na reinicialização, mas permanece desligado se você explicitamente o parar. Após o início, o Portainer é acessível em localhost:9000 no navegador. Tim recomenda esta política para ferramentas de gestão que você quer executando o tempo todo, enquanto mantém contêineres de banco de dados em início manual.
O Comando Docker Run para SQL Server
[2:17 - 6:09] A configuração completa do SQL Server se resume a um comando. Tim o transfere de sua máquina Windows usando o LocalSend (coberto no vídeo anterior da missão secundária), então o desmonta pedaço por pedaço:
// Single command to launch SQL Server 2025 in Docker
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test12345" -p 1433:1433 --name sql2025 mcr.microsoft.com/mssql/server:2025-latest
// Single command to launch SQL Server 2025 in Docker
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test12345" -p 1433:1433 --name sql2025 mcr.microsoft.com/mssql/server:2025-latest
Cada flag serve a um propósito específico. A flag -e "ACCEPT_EULA=Y" aceita o contrato de licença da Microsoft. A flag -e "SA_PASSWORD=Test12345" define a senha do administrador do sistema em texto simples, o que Tim reconhece ser adequado para desenvolvimento local, mas nunca deve ser usado para qualquer coisa voltada para produção. A flag -p 1433:1433 mapeia a porta interna do SQL Server do contêiner para a mesma porta na máquina host. A flag --name sql2025 dá ao contêiner um rótulo legível por humanos. E a tag da imagem 2025-latest puxa a versão mais recente do SQL Server 2025 do registro de contêineres da Microsoft.
Após executar o comando, o Docker baixa as camadas da imagem, as extrai, e inicia o servidor. Todo o processo leva alguns minutos, a maior parte dos quais é o download inicial.
Verifying in Portainer
[6:09 - 7:04] De volta ao Portainer, o novo contêiner do SQL Server aparece na lista de contêineres, mostrando seu status como em execução. Tim faz uma escolha deliberada aqui: sem montagem de volume para persistência de dados. Se o contêiner for excluído, os bancos de dados dentro dele também desaparecem.
Isso é intencional para uma configuração de desenvolvimento. Começar do zero significa sem dados de teste acumulados, sem deriva de esquema de experimentos anteriores e sem problemas de "funciona na minha máquina" causados por estado restante. Se você precisar preservar bancos de dados antes de excluir um contêiner, pode exportá-los primeiro, mas a abordagem de limpo é o fluxo de trabalho preferido para trabalho local.
Conectando-se do VS Code
[7:04 - 8:50] Para gerenciar o banco de dados, Tim instala a extensão SQL Server para VS Code da Microsoft. Após a instalação, um novo painel SQL Server aparece na barra lateral onde você pode adicionar conexões.
Os parâmetros de conexão são mínimos. O nome do servidor é . (ponto), que significa localhost. Como o contêiner mapeia a porta 1433 (padrão do SQL Server), não é necessário especificar o número da porta. O nome de usuário é sa, a senha é a do comando Docker, e o banco de dados padrão é master. Confie no certificado do servidor quando solicitado.
Uma vez conectado, o VS Code mostra o ícone do Docker ao lado da conexão, confirmando que detectou o ambiente contêinerizado. As bases de dados do sistema (master, model, msdb, tempdb) aparecem na árvore, prontas para uso.
Criando um Banco de Dados e Executando Consultas
[8:50 - 12:45] Com a conexão estabelecida, Tim cria um novo banco de dados chamado PeopleDB diretamente da barra lateral do VS Code. Dentro dele, ele cria uma tabela People usando o designer visual, adicionando uma coluna de Id auto-incrementável, uma coluna de FirstName, e uma coluna de LastName (ambas NVARCHAR(50), não nulas).
Então ele abre uma nova janela de consulta e insere dados de teste:
INSERT INTO dbo.People (FirstName, LastName)
VALUES
('Tim', 'Corey'),
('Sue', 'Storm'),
('Dave', 'Corey')
INSERT INTO dbo.People (FirstName, LastName)
VALUES
('Tim', 'Corey'),
('Sue', 'Storm'),
('Dave', 'Corey')
Executar um SELECT confirma que as linhas estão no lugar:
SELECT * FROM dbo.People
-- Returns: Tim Corey, Sue Storm, Dave Corey
SELECT * FROM dbo.People WHERE LastName = 'Corey'
-- Returns: Tim Corey, Dave Corey
SELECT * FROM dbo.People
-- Returns: Tim Corey, Sue Storm, Dave Corey
SELECT * FROM dbo.People WHERE LastName = 'Corey'
-- Returns: Tim Corey, Dave Corey
O ciclo completo (criar banco de dados, projetar tabela, inserir dados, consultar com filtros) leva apenas alguns minutos. Tudo roda dentro do contêiner Docker, gerenciado através do VS Code, sem SQL Server instalado na máquina host.
Parando, Iniciando e Gerenciamento de Recursos
[12:45 - 14:20] Quando terminar de trabalhar com o SQL Server, pará-lo é um clique no Portainer ou um comando no terminal:
docker stop sql2025
docker stop sql2025
Um contêiner parado libera todos os recursos de CPU e memória. A única coisa que continua consumindo é espaço em disco para os arquivos de imagem e contêiner, comparável a (e geralmente menor que) uma instalação nativa do SQL Server.
Tim aponta que isso é a vantagem central sobre uma instalação tradicional. Um SQL Server instalado localmente roda como um serviço Windows ou Linux, consumindo recursos o tempo todo. Um contêiner Docker só usa recursos quando você escolhe iniciá-lo.
Executando Várias Versões Lado a Lado
[14:20 - 17:17] Uma das características mais práticas do Docker para desenvolvimento de banco de dados é a capacidade de rodar várias versões simultaneamente. Tim demonstra lançando o SQL Server 2022 ao lado do contêiner 2025 existente:
// SQL Server 2022 on a different port
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test12345" -p 2022:1433 --name sql2022 mcr.microsoft.com/mssql/server:2022-latest
// SQL Server 2022 on a different port
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test12345" -p 2022:1433 --name sql2022 mcr.microsoft.com/mssql/server:2022-latest
A principal diferença é o mapeamento de portas: -p 2022:1433 mapeia a porta interna 1433 do contêiner para a porta 2022 no host. Isso evita um conflito de porta com a instância de 2025 já usando a 1433. Após a conclusão do download, ambos os contêineres aparecem no Portainer, ambos executando simultaneamente.
Isso é útil quando um cliente roda o SQL Server 2022 em produção, mas a equipe desenvolve contra 2025. Alternar entre versões não requer reinstalação, apenas iniciar o contêiner certo. Todas as imagens SQL Server disponíveis (2017, 2019, 2022, 2025) estão listadas em mcr.microsoft.com, e a mesma abordagem funciona para MySQL, PostgreSQL, MongoDB, e Cosmos DB.
Resumo: Um Comando para um Ambiente Completo de Banco de Dados
[17:17 - 17:47] O passo a passo demonstra que um único comando Docker substitui o que costumava ser um processo de instalação em várias etapas com assistentes de configuração, gerenciamento de serviços e conflitos de versão. O contêiner inicia em minutos, executa apenas quando necessário e pode ser excluído sem deixar rastros no sistema host.
Para desenvolvedores que trabalham em vários projetos com diferentes requisitos de banco de dados, este padrão escala de forma clara. Cada projeto ganha seu próprio contêiner, sua própria versão e seus próprios dados isolados.
Conclusão
[17:47 - 18:20] Resumindo: SQL Server no Linux executa no Docker com um único comando docker run. Conecte-se a ele a partir do VS Code usando a extensão SQL Server, crie bancos de dados e tabelas através da barra lateral e escreva consultas assim como você faria contra qualquer outra instância do SQL Server. Quando terminar, pare o contêiner e recupere os recursos.
A combinação do Docker para gerenciamento de bancos de dados e do VS Code para consultas oferece um fluxo de trabalho completo de desenvolvimento SQL no Linux sem a necessidade de instalação nativa de banco de dados.
Dica de Exemplo: Se você precisar testar contra uma versão específica do SQL Server, verifique mcr.microsoft.com para todos os tags disponíveis. Você pode executar 2017, 2019, 2022 e 2025 simultaneamente, atribuindo a cada contêiner uma porta de host diferente (1433, 2019, 2022, 2025). Nomeie-os de forma descritiva (sql2019, sql2022) para que a saída do Portainer e docker ps permaneça legível.
Assista ao vídeo completo no Canal do YouTube dele e obtenha mais insights sobre desenvolvimento em C# com bancos de dados no Linux.
