SQL Server Docker
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: