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.
Banco | MariaDB | MySQL | PostgreSQL | |
Root/SA/Super User Password | MARIADB_ROOT_PASSWORD | MYSQL_ROOT_PASSWORD | POSTGRES_PASSWORD | |
Banco a ser criado | MARIADB_DATABASE | MYSQL_DATABASE | POSTGRES_DB | |
Usuário | MARIADB_USER | MYSQL_USER | POSTGRES_USER (super user) | |
Senha | MARIADB_PASSWORD | MYSQL_PASSWORD | ||
Link da Imagem no Hub | https://hub.docker.com/_/mariadb | https://hub.docker.com/_/mysql | https://hub.docker.com/_/postgres |
Abaixo uma referência ao path padrão de execução de scripts de inicialização.
Banco | MariaDB | MySQL | PostgreSQL | |
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 Hub | https://hub.docker.com/_/mariadb | https://hub.docker.com/_/mysql | https://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