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!
Latest posts by Breno RdV (see all)
- Estamos de mudança! - abril 28, 2024
- O que é Metaclass e como ela funciona. (#python #dev #metaclass) - janeiro 11, 2023
- Entenda a mágica dos Generators. (#python, #dev, #generator, #iterator) - dezembro 28, 2022