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

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:

  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!