.NET - Executando Consultas do SQL Server no Docker
 Hoje vamos aprender a executar consultas do SQL Server no Docker.

A opção de conteinerizar muitos recursos pode ser de grande valia e parece caminha para ser uma tendência.

Neste artigo vou apresentar os comandos necessários para iniciar uma instância de um contêiner do SQL Server, conectar-se a uma instância do shell dentro do contêiner e executar alguns comandos SQL. Isso te livra de ter que instalar o SQL Server no seu ambiente e torna o seu ambiente de desenvolvimento muito flexível.

Antes de começar, você precisará do Docker em execução em seu ambiente de desenvolvimento. Também estou supondo que você tenha acesso de linha de comando ao seu ambiente, seja por meio de SSH ou algum editor.

Os recursos usados serão os seguintes:

Iniciando um contêiner do SQL Server

A imagem oficial do docker do SQL Server está disponível no Docker Hub e com um único comando podemos colocá-lo em funcionamento.  O endereço oficial é : https://hub.docker.com/_/microsoft-mssql-server

Abaixo temos o comando que vai baixar, criar e executar o contêiner do SQL Server na porta 1433 com a instância nomeada como sqlserver, executando em segundo plano usando a imagem mcr.microsoft.com/mssql/server:2019-latest:

docker run -e 'ACCEPT_EULA=Y' -e "SA_PASSWORD=Pass123!" -p 1433:1433 --name sqlserver -d mcr.microsoft.com/mssql/server:2019-latest

docker run Cria e executa o contêiner Docker
-e 'ACCEPT_EULA=Y' Aceita os termos de licença da Microsoft
-e 'SA_PASSWORD=Pass123!' Define uma senha para o usuário SA
-p 1433:1433 mapeia a porta 1433 do contêiner para porta 1433 do host
-d Executa o contêiner em segundo plano
--name=sqlserver Define o nome do contêiner
mcr.microsoft.com/mssql/server:2019-latest Nome da imagem usada para criar o contêiner

Além disso neste comando estamos aceitando o contrato de licença de usuário final, e, estamos inicializando a conta de usuário sa expondo a porta do SQL Server para 1433 para que os aplicativos possam acessar o banco remotamente.

Também iniciamos nosso contêiner desanexado (-d), que manterá seu terminal livre para outras entradas do usuário. Sinta-se à vontade para alterar quaisquer valores para atender às suas necessidades específicas.

Vou executar este comando em um terminal do Windows :

Examinando nosso ambiente através dos comandos para consultar as imagens e os contêineres teremos o seguinte resultado:

Vamos agora anexar ao contêiner em execução.

Anexando ao nosso contêiner do SQL Server

Nosso primeiro objetivo é anexar uma sessão de linha de comando atual à nossa instância de contêiner do SQL Server.  Dessa forma iremos nos conectar ao contêiner nomeado do sqlserver e iniciar uma sessão bash. Para isso podemos usar os seguintes comandos:

docker exec -it sqlserver "bash"

Podemos também iniciar um Shell ao invés do bash. Para isso o comando seria: docker exec -it sqlserver /bin/sh

Ambos os comandos irão funcionar para o nosso propósito.

Executando o SQLCMD em um contêiner do Docker

O SQLCMD é um utilitário baseado em linha de comando que você pode usar para se conectar a qualquer instância do SQL Server. Uma das características significativas deste utilitário é que ele funciona da mesma forma independentemente da plataforma (Windows, Linux, macOS, Azure Cloud shell).

O SQLCMD requer alguns parâmetros para funcionar. As informações necessárias para conectar uma instância do SQL Server usando essa ferramenta são apenas o nome do host ou endereço IP seguido pelo número da porta, nome de usuário e senha :

sqlcmd -S <hostname | port number> -U <Login> -P <Password>

Agora que estamos no contexto do nosso contêiner, podemos executar as ferramentas empacotadas com a imagem do SQL Server.

Podemos entrar na pasta /opt/mssql-tools/bin e a seguir e verificar se temos o sqlcmd instalado :

A seguir podemos retornar e emitir o comando:  /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Pass123!'

A execução do comando acima iniciará uma instância do SQLCMD, permitindo que escrevamos consultas na sessão de linha de comando. Após o comando, se tudo ocorrer corretamente, você um prompt 1>

Estamos prontos para executar consultas.

A primeira consulta vai determinar quais bancos de dados estão sendo executados na minha instância de contêiner. Para isso vamos digitar o seguinte comando :   select physical_database_name from sys.databases  seguido de um go :

Nota: Lembre-se de incluir a palavra-chave GO ao escrever as instruções de consultas.

Como resultado vemos que temos os bancos de dados :  master, tempdb model e msdb.

Agora vamos criar um banco de dados e a seguir exibir os nomes de todos os bancos de dados no servidor usando os seguintes comandos Transct-SQL:

1> CREATE DATABASE ExemploDB
2> SELECT Name from sys.Databases
3> GO

Ao teclar Enter teremos o seguinte resultado:

Vemos que o banco de dados ExemploDB foi criado.

Vamos criar uma tabela chamada Aluno neste banco de dados com 3 campos:

A instrução SQL usada será:  CREATE TABLE Alunos(id INT, nome NVARCHAR(50), idade INT)

A seguir vamos incluir dois registros na tabela Alunos usando o comando INSERT INTO:

INSERT INTO Alunos VALUES (1, 'Maria', 40); 
INSERT INTO Alunos VALUES (2, 'Manoel', 38);
Para isso digite os comandos na linha de comando sqlcmd no contêiner:

Para exibir os dados da tabela Alunos digite o comando abaixo no prompt do sqlcmd no contêiner:

SELECT * FROM Alunos WHERE idade > 21;
GO

Temos a exibição dos dados incluídos via comandos SQL usando a ferramenta sqlcmd.

Para sair digite QUIT.

 

Acessando o contâiner via SQL Server Management Studio

 

Podemos acessar o contêiner via SQL Server Management Studio informando em Server name o servidor: localhost e a porta 1433, e , as credenciais de acesso nos campos Login e Password.


Ficaria assim :

 


Fazendo a conexão com o contêiner podemos acessar o banco ExemploDB e a tabela Alunos exibindo os seus dados:

 


 

Acima estamos vendo as informações do SQL Server no contêiner Docker.

Para parar e remover o contêiner criado podemos usar os seguintes comandos no terminal:

docker container stop sqlserver
docker container rm sqlserver

Em um próximo artigos vamos continuar a mostrar como usar o SQL Server no Linux.

Nota: Acompanhe a introdução ao Docker nesta série de artigos sobre o assunto.

E estamos conversados.

"Todo aquele, pois, que escuta estas minhas palavras, e as pratica, assemelhá-lo-ei ao homem prudente, que edificou a sua casa sobre a rocha;"
Mateus 7:24

Referências:


José Carlos Macoratti