fbpx
Publicado em: domingo, 12 de abr de 2020
mssql-server-linux | SQL Server +Automações

A mesma imagem do SQL Server no Linux, mas tão configurável quanto as consagradas imagens do MariaDB, MySQL e PostgreSQL.

Quem precisa subir um banco de dados junto com a aplicação precisa de uma imagem que possibilite a criação de usuários, databases, inicialização via scripts.

Esses recursos já estão presentes nas imagens do MariaDB, MySQL e PostgreSQL no Docker Hub.

Mas e quando falamos de SQL Server? Pois é, esse tipo de parametrização não existe. Você só tem a opção(obrigação) de definir a senha do usuário SA.

Ao mesmo tempo se você aprendeu a subir uma instância ou do MariaDB, ou MySQL, ou PostgreSQL, em container, você automaticamente já aprendeu a subir todas as demais. Isso acontece porque há um padrão de configuração nas 3 imagens.

Que padrão é esse?

Abaixo temos uma lista com variáveis de ambiente nessas 3 principais imagens.

BancoMariaDBMySQLPostgreSQL
Root/SA/Super User PasswordMARIADB_ROOT_PASSWORDMYSQL_ROOT_PASSWORDPOSTGRES_PASSWORD
Banco a ser criadoMARIADB_DATABASEMYSQL_DATABASEPOSTGRES_DB
UsuárioMARIADB_USERMYSQL_USERPOSTGRES_USER (super user)
SenhaMARIADB_PASSWORDMYSQL_PASSWORD
Link da Imagem no Hubhttps://hub.docker.com/_/mariadbhttps://hub.docker.com/_/mysqlhttps://hub.docker.com/_/postgres

Abaixo uma referência ao path padrão de execução de scripts de inicialização.

BancoMariaDBMySQLPostgreSQL
Path de Execução automática de Scripts/docker-entrypoint-initdb.d//docker-entrypoint-initdb.d/docker-entrypoint-initdb.d
Tipos de arquivo suportados.sh.sql.sql.gz, and .sql.xz.sh.sql and .sql.gz*.sql*.sql.gz, or *.sh
Link da Imagem no Hubhttps://hub.docker.com/_/mariadbhttps://hub.docker.com/_/mysqlhttps://hub.docker.com/_/postgres

Com esses parâmetros você consegue realizar as principais atividades corriqueiras na hora de criar bancos de dados em containers par realizar os mais variados tipos de teste. Desde validar se uma versão do banco é compatível com uma aplicação, recriar um ambiente para realizar um teste de integração e desenvolver. Tudo isso sem nenhuma dor de cabeça.

Por isso eu criei estendi as imagens do SQL Server para adicionar esses comportamentos.

Recursos adicionados

Criação de Banco de Dados

Com a variável de ambiente MSSQL_DATABASE você define o nome de um database para ser criado. Se optar por usar essa variável de ambiente, você pode também usar MSSQL_DATABASE_COLLATE para definir o collate desse banco que está nascendo. O collate default que eu escolhi é SQL_Latin1_General_CP1_CI_AI (aqui tem uma lista de collates).

Usuários db_owner

Com as variáveis de ambiente MSSQL_USER e MSSQL_PASSWORD você define quais as credenciais de um novo usuário do banco. Se você especificou o database em MSSQL_DATABASE, esse usuário já nasce como db_owner desse database.

Ainda cogito adicionar mais um parâmetro para definir se esse usuário será db_owner ou terá apenas permissões de read/write no banco. Por hora fica como está: com a role de db_owner.

Inicialização automática de scripts

Os scripts de inicialização podem ser adicionados no path /docker-entrypoint-initdb.d/. Durante a primeira execução do container (e somente durante essa execução), tudo que houver nesse diretório será executado seguindo as seguintes premissas:

  • *.sh será executado com o usuário padrão da imagem
  • *.sql será executado com o usuário SA.
  • Demais arquivos de outras extensões serão ignorados

Exemplo de uso:

Docker Compose

version: "3.7"

services:
  sql:
    image: luizcarlosfaria/mssql-server-linux:2019-latest
      environment: {
        "ACCEPT_EULA" : "Y",
        "SA_PASSWORD" : "8k3W2C2BVzAW9p",
        "MSSQL_DATABASE" : "db01",
        "MSSQL_DATABASE_COLLATE" : "SQL_Latin1_General_CP1_CI_AI",
        "MSSQL_USER" : "db01_dbowner_username",
        "MSSQL_PASSWORD" : "db01_dbowner_password",
      }
      ports: 
        - 1433:1433
      volumes: 
        - "./tests/:/docker-entrypoint-initdb.d/"

Basta escrever esse conteúdo em um arquivo docker-compose.yaml e rodar o docker-compose up.

Links

github.com/luizcarlosfaria/mssql-server-linux

hub.docker.com/r/luizcarlosfaria/mssql-server-linux/

Conclusão

A imagem resultante é super simples de ser usada e permite criar um ambiente completo, sem nenhuma interação humana. É excelente para ambientes de teste, ou quando você quer entregar um ambiente completo para desenvolvedores, sem que eles precisem se preocupar com o setup do banco.

Essa imagem está sendo usada em produção para subir ambiente de testes para aplicações .NET Core.

0 comentários

Enviar um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Lives

Fique de olho nas lives

Fique de olho nas lives no meu canal do Youtube, no Canal .NET e nos Grupos do Facebook e Instagram.

Aceleradores

Existem diversas formas de viabilizar o suporte ao teu projeto. Seja com os treinamentos, consultoria, mentorias em grupo.

Share This