SQL Server Docker
23/08/2020
André Baltieri

Requisitos

Terminal

Se estiver no Mac ou Linux, provavelmente já tem um Terminal bacana, mas caso esteja utilizando o Windows, sugiro fortemente que utilize o Windows Terminal para estas ações.

Aqui tem um link com a instalação e configurações que uso: https://balta.io/blog/windows-terminal

Docker

Você precisa também do Docker instalado e rodando em sua máquina. Caso ainda não tenha realizado esta instalação, aqui está um artigo que mostro como fazer: https://balta.io/blog/docker-instalacao-configuracao-e-primeiros-passos

WSL 2 (Somente Windows)

Caso esteja no Windows, recomendo fortemente que instale e utilize o WSL que é um subsistema Linux dentro do Windows.

Este processo tem que ser feito antes da instalação do Docker. Basta acessar este link e realizar a instalação: https://balta.io/blog/wsl

Obtendo a imagem

Certifique-se que o Docker está em execução e abra um novo terminal, no meu caso, a versão do Docker em execução é a mostrada abaixo. Você pode verificar isto executando o comando docker --version no seu terminal.

Docker version 19.03.12, build 48a66213fe

Nosso primeiro passo então é obter a imagem do SQL Server que será o molde para criarmos nossos containers. Para isto, executamos o comando abaixo.

docker pull mcr.microsoft.com/mssql/server

Mac com chip M1

No momento o SQL Server ainda não suporta os chips M1 da Apple, desta forma, precisamos rodar o Azure SQL Edge:

docker pull mcr.microsoft.com/azure-sql-edge

Note que a primeira mensagem será Using default tag: latest o que significa que estamos obtendo a última versão desta imagem, provavelmente com a última versão estável do Mongo.

Caso queira baixar alguma versão específica, verifique as tags disponíveis aqui.

Rodando o SQL Server

Para executar esta imagem você pode usar a linha abaixo. Não se esqueça de mudar o MSSQL_SA_PASSWORD para a senha desejado. Mas atenção! A senha tem um nível mínimo de complexidade, se você definir uma senha muito fácil (ex: 1q2w3e4r) o container vai finalizar sozinho.

docker run --name sqlserver -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=1q2w3e4r@#$" -p 1433:1433 -d mcr.microsoft.com/mssql/server

Caso a senha que você escolheu seja fraca demais, você verá Exited(1) e a seguinte mensagem:

ERROR: Unable to set system administrator password: Password validation failed. The password does not meet SQL Server password policy requirements because it is not complex enough. The password must be at least 8 characters long and contain characters from three of the following four sets: Uppercase letters, Lowercase letters, Base 10 digits, and Symbols..

Veja os requisitos para a senha de administrador aqui.

Windows

Caso esteja no Windows, com WSL 2 é importante informar o volume onde este container será executado, utilizando a flag -v ~/docker como mostrado abaixo.

docker run -v ~/docker --name sqlserver -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=1q2w3e4r@#$" -p 1433:1433 -d mcr.microsoft.com/mssql/server

Para parar a execução você pode pressionar CTRL + C no Terminal. Deste momento em diante, seu container vai aparecer na Dashboard do Docker de forma visual, onde você poderá parar ou iniciar ela a qualquer momento.

Veja os requisitos para a senha de administrador aqui.

Mac M1

Continuando a saga do M1, a execução muda para os comandos abaixo:

docker run -e "ACCEPT_EULA=1" -e "MSSQL_SA_PASSWORD=1q2w3e4r@#$" -e "MSSQL_PID=Developer" -e "MSSQL_USER=SA" -p 1433:1433 -d --name=sqlserver mcr.microsoft.com/azure-sql-edge

Veja os requisitos para a senha de administrador aqui.

Connection String

Se você utilizou as mesmas configurações deste artigo, sua Connection String será igual abaixo. Caso necessário, modifique as informações que alterou na execução dos containers.

Server=localhost,1433;Database=balta;User ID=sa;Password=1q2w3e4r@#$

Erros comuns

A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: SSL Provider

Nas novas versões da imagem do SQL Server, no Windows, tem ocorrido um problema de SSL. Para resolver este problema, primeiro execute os seguintes comandos:

dotnet dev-certs https --clean
dotnet dev-certs https --trust

Feito isto, os certificados HTTPS do .NET estarão atualizados e funcionais. Desta forma, adicione os parâmetros Trusted_Connection e TrustServerCertificate na sua Connection String como mostrado abaixo:

Server=localhost,1433;Database=balta;User ID=sa;Password=1q2w3e4r@#$;Trusted_Connection=False; TrustServerCertificate=True;

GUI Client

Caso queira gerenciar seu banco de uma forma visual, você pode utilizar uma das ferramentas gratuitas abaixo:

Conheça o autor

André Baltieri

Microsoft MVP

Me dedico ao desenvolvimento de software desde 2003, sendo minha maior especialidade o Desenvolvimento Web. Durante esta jornada pude trabalhar presencialmente aqui no Brasil e Estados Unidos, atender remotamente times da ?ndia, Inglaterra e Holanda, receber 8x Microsoft MVP e realizar diversas consultorias em empresas e projetos de todos os tamanhos.

An unhandled error has occurred. Reload 🗙