Criando uma imagem SQL Server com dados pré-carregados. (Docker)
Overview
Olá, entusiastas de tecnologia! No nosso último encontro, desvendamos os mistérios por trás da criação de uma imagem MySQL com dados pré-carregados. Agora, elevamos nosso jogo ao nos aventurarmos pelo universo do SQL Server, detalhando meticulosamente como gerar uma imagem recheada com a base AdventureWorks, pronta para uso. Se você está buscando aprimorar seus conhecimentos em Docker, acompanhe-me nesta jornada detalhada, embalada de dicas cruciais e orientações precisas para otimizar suas habilidades e resultados em desenvolvimento de software.
No último post, mostrei como fazer isso para o MySql. Agora é a vez de fazer a mesma coisa com o SQL Server e mostrar também como gerar uma imagem que já vem carregada com a base AdventureWorks.
01: Escolhendo uma imagem base
FROM mcr.microsoft.com/mssql/server
A imagem que utilizo neste exemplo é a padrão da Microsoft para o SQL Server.
02: Definindo as variáveis de build/ambiente
Se estiver com dúvida entre ARG e ENV, veja este post.
ENV CHECK_POLICY=OFF
A variável acima é para desligar a politica de verificação das senhas. (Tenha em mente que não é uma boa ideia para produção.)
ENV ACCEPT_EULA=Y
Esta variável serve para indicar que você concorda com os termos de uso. Sem isso, quando você criar o container, ele vai fechar imediatamente.
ENV SA_PASSWORD=Dev123456789
Esta é a senha do usuário sa (root).
ENV MSSQL_PID=Developer
Esta variável define a chave do produto. As opções são:
- Evaluation
- Developer
- Express
- Web
- Standard
- Enterprise
- Uma chave específica do produto
Como você pode perceber, o SQL Server é um pouco mais burocrático, mas isso não é necessariamente ruim.
03: Copiando os dados que serão carregados
COPY ./setup.sql /setup_scripts/setup.sql
Este comando copia o arquivo setup.sql para a pasta /setup_scripts/ da imagem. Este script será executado com o próximo comando.
04: Executando o script de criação da base
RUN ( /opt/mssql/bin/sqlservr --accept-eula & ) | grep -q "Service Broker manager has started" \
&& /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ${SA_PASSWORD} -i /setup_scripts/setup.sql \
&& pkill sqlservr
Acima são executados vários comandos…
- Primeiro o SQL Server é iniciado.
- Depois aguardamos a frase “Service Broker manager has started”, indicando que o servidor está pronto.
- O próximo passo é rodar um comando que executar tudo que está no script de setup que definimos;
- Por último, matamos o processo do SqlServer.
05: Comandos finais
CMD ["/opt/mssql/bin/sqlservr"]
Este comando é o que vai inicializar o SQL Server.
06: Gerando a imagem
docker build -t preLoadedSqlServer:latest
O comando para gerar a imagem é bem simples e já passamos por ele em vários dos últimos posts. Neste exemplo, chamei a imagem de preLoadedSqlServer.
07: [opcional] Criando o arquivo docker-compose.yml
version: "3.2"
services:
sql-server-db:
container_name: sql-server-db
image: preLoadedSqlServer:latest
ports:
- "1433:1433"
Este passo é opcional, mas gosto de fazer. Ele é um arquivo docker-compose simples. Se for utilizar, lembre-se de que o nome da imagem aqui deve ser o mesmo que você utilizou na hora de gerar a imagem.
Coloquei este exemplo em um repositório do meu Github.
Extra: Criando uma imagem populada com o banco AdventureWorks
Caso não conheça, o AdventureWorks é uma base de dados de exemplo que a Microsoft criou em 2005 . Você pode baixá-lo de graça no Github, mas para utiliza-lo no Docker (com Linux), é necessário a remover a propriedade CODEPAGE dos scripts.
Para facilitar a vida e deixar este processo mais simplificado, o repositório que criei com este exemplo já está pronto com esta alteração.
Para utilizar:
- Clonar o repositório: https://github.com/brenordv/docker_preloaded_sqlserver_adventureworks
- Fazer o build da imagem
- Criar o container.
Espero ter ajudado!