Criando uma imagem SQL Server com dados pré-carregados. (Docker)

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:

  1. Evaluation
  2. Developer
  3. Express
  4. Web
  5. Standard
  6. Enterprise
  7. 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…

  1. Primeiro o SQL Server é iniciado.
  2. Depois aguardamos a frase “Service Broker manager has started”, indicando que o servidor está pronto.
  3. O próximo passo é rodar um comando que executar tudo que está no script de setup que definimos;
  4. 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:

  1. Clonar o repositório: https://github.com/brenordv/docker_preloaded_sqlserver_adventureworks
  2. Fazer o build da imagem
  3. Criar o container.

 

 

Espero ter ajudado!

 

 

The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in Dev, Docker and tagged , , , , , , .