Back-End

16 jan, 2019

Docker + Bancos relacionais: cuidados importantes na criação de containers

Publicidade

A utilização de tecnologias relacionais a partir de containers Docker traz diversas vantagens, podendo ser destacados como benefícios desta prática:

  • Uma maior rapidez na montagem de ambientes de Desenvolvimento e Testes. Em poucos segundos uma instância já se encontra no ar, economizando um tempo precioso que seria provavelmente gasto com instalações convencionais;
  • A possibilidade de uso simultâneo de diferentes versões de um mesmo SGBD. Este aspecto contribui para que se evite a desinstalação de um release específico ou, até mesmo, que ocorram conflitos entre versões distintas presentes numa mesma máquina.

Apesar destes pontos favoráveis, alguns cuidados devem ser levados em consideração:

  • É primordial que se crie um container definindo as credenciais do administrador do SGBD;
  • Muitos containers são criados seguindo configurações default, com os arquivos de dados permanecendo dentro dos mesmos. Uma eventual falha/inoperância no container (ou até uma exclusão acidental do mesmo) resultará em perda de informações. Logo, a criação de um volume mapeando os dados para fora do container (no caso um diretório da máquina em que se executa o Docker) é outra questão importante a considerar sempre.

Neste artigo apresento um exemplo seguindo estas recomendações, com isso acontecendo em um ambiente baseado no Ubuntu Desktop 18.04 e no qual serão executadas lado a lado instâncias das versões 2017 e 2019 (ainda em Preview) do SQL Server.

Criando instâncias do SQL Server a partir de containers

Já abordei o uso do SQL Server 2017 com Docker em um artigo anterior, no qual ainda descrevi o uso destas tecnologias em conjunto com o .NET Core 2.1 em ambientes Linux:

E também em uma apresentação em um meetup promovido pelo grupo .NET SP em novembro do ano passado:

O container que executa a instância do SQL Server 2017 neste artigo foi criado por meio da seguinte instrução:

docker run --name sqlserver2017 -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=SqlServer2017!' -p 1433:1433 -v /home/renatogroffe/Desenvolvimento/SQLServer2017:/var/opt/mssql -d microsoft/mssql-server-linux:2017-latest

Na próxima imagem podemos observar tal instância sendo acessada por meio do Azure Data Studio, com os bancos de dados existentes, destacados em vermelho:

Importante destacar aqui o uso do atributo -v. Essa configuração permitirá que se crie um volume, especificando assim o diretório no Ubuntu Desktop em que serão gravados os arquivos de dados (/home/renatogroffe/Desenvolvimento/SQLServer2017).

Nas imagens a seguir podemos observar o diretório gerado e seu conteúdo (subdiretórios e arquivos de dados) na máquina em que o container está executando:

Vale ressaltar que essa estrutura de diretórios e arquivos permaneceria dentro do container caso este último fosse gerado sem o uso da opção -v.

Já a próxima instrução criará um container do SQL Server 2019 CTP 2.1, novamente empregando um volume para que os arquivos de dados permaneçam fora deste elemento (o conteúdo que estaria localizado dentro do diretório /var/opt/mssql será mapeado para fora do container. No caso, em /home/renatogroffe/Desenvolvimento/SQLServer2019-CTP2.1:

docker run --name testesqlserver2019-ctp2-1 -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=SqlServer2019!' -v /home/renatogroffe/Desenvolvimento/SQLServer2019-CTP2.1:/var/opt/mssql -p 31433:1433 -d mcr.microsoft.com/mssql/server:2019-CTP2.1-ubuntu

Como resultado teremos toda a estrutura de pastas e arquivos de dados sendo gerada em /home/renatogroffe/Desenvolvimento/SQLServer2019-CTP2.1:

Referências