Desenvolvimento, HomeLab

Subindo banco de dados em contêiner

Neste artigo estaremos subindo um banco de dados em contêiner explorando o Docker Compose e simplificando a inicialização de bancos de dados.

No meu tempo…

Lembro que quando comecei a trabalhar com programação lá no início de 2008 com PHP, quando montávamos o nosso ambiente de desenvolvimento usávamos o que chamamos de LAMP, que é uma combinação de softwares de código aberto composto por Linux, Apache, MySQL e PHP, instalávamos todos os softwares diretamente no Linux e pronto, ambiente preparado. Para quem trabalhava com Windows também fazia este processo e em alguns casos substituíam o Apache pelo IIS.

Não muito tempo depois desta época surgiu o XAMPP que é um software que agrupa Apache, MySQL, PHP e Perl. Com ele a instalação tornou-se bem mais tranquila, além do fato de ter a versão para Windows e Linux,  a instalação é rápida pois já vem com os softwares previamente configurados.

Hoje em dia podemos fazer isso sem precisar instalar nenhum dos softwares mencionados, fazemos isso através de contêineres. Falamos sobre contêineres neste outro artigo, tire um tempo para ler. Neste artigo vamos subir um banco de dados de maneira rápida e eficiente usando o Docker Compose.

Docker Compose

Docker Compose é uma ferramenta poderosa para gerenciar contêineres em Docker, ele utiliza de um arquivo YAML com as especificações pré-definidas para subir um ou mais contêineres. Neste artigo, vamos subir um banco de dados e também explorar cada etapa de configuração do processo.

Pré-requisitos:  

Certifique-se de ter o Docker e o Docker Compose instalados em sua máquina antes de prosseguir. Você pode instalá-los seguindo as instruções no site oficial do Docker.

Configurando o arquivo yaml

Como primeiro passo cria um arquivo chamado docker-compose.yml no diretório de sua escolha. Abra o arquivo em um editor de texto e comece definindo a versão do Docker Compose.

A propriedade version define a especificação Compose para compatibilidade entre as versões:

# docker-compose.yml
version: '3.8'
Bash

No arquivo adicionaremos a propriedade services que indica o inicio da seção onde configuraremos os serviços, no nosso caso o banco de dados:

# docker-compose.yml
version: '3.8'

services:
Bash

Em seguida começaremos com a configuração do serviço:

# docker-compose.yml
version: '3.8'

services:
  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: 'nome_do_banco'
      MYSQL_USER: 'usuario_db'
      MYSQL_PASSWORD: 'password'
      MYSQL_ROOT_PASSWORD: 'password_root'
    ports:
      - '3306:3306'
    volumes:
      - ./dados_mysql:/var/lib/mysql
    healthcheck:
      test: mysqladmin ping -h 127.0.0.1 -u $$MYSQL_USER --password=$$MYSQL_PASSWORD
      timeout: 20s
      retries: 10
Bash

Na especificação do serviço temos:

  • db: É o nome do serviço do banco de dados, você pode colocar o nome que quiser neste local.
  • image: mysql:5.7: Especifica a imagem do banco de dados a ser usada e sua versão. No nosso caso estamos usando como exemplo um banco de dados MySQL. Mais imagens de banco de dados podem ser pesquisadas no DockerHub.
  • environment: Define variáveis de ambiente para o contêiner do banco de dados, como senhas e usuários. No caso do MySQL as variáveis configuradas no arquivo são as principais. Na página da imagem no DockerHub contêm mais configurações que podem ser adicionadas.
  • ports: 3306:3306: Mapeia a porta 3306 do contêiner para a porta 3306 do host. A porta 3306 é comumente usada para bancos de dados MySQL.
  • volumes: ./dados_mysql:/var/lib/mysql: Mapeia o diretório local ./dados_mysql para o diretório /var/lib/mysql no contêiner, permitindo que os dados do banco de dados persistam localmente. Com isso caso contêiner seja desligado não terá perda de dados.
  • healthcheck: Propriedade usada para identificar quando o contêiner está saudável, ou seja, subiu corretamente. Sempre bom utilizar quando sobe um serviço com dependência do banco de dados.

Subindo o Banco de Dados

Com o arquivo preparado, no mesmo diretório do arquivo abra o terminal e execute o seguinte comando:

Nas versões mais antigas do CLI:

docker-compose up
Bash

Na versão mais recente do CLI:

docker compose up
Bash

Como resultado deste comando o Docker será executado no modo interativo. Você verá a saída do log dos contêineres no console em que o comando foi executado. Isso é útil para depuração e para ver o que está acontecendo em tempo real.

Executando com o argumento -d inicia os serviços em segundo plano, o que significa que você receberá o controle do terminal de volta imediatamente após a inicialização dos contêineres, sem ver a saída dos logs no console. Isso é útil em situações onde você deseja liberar o terminal para realizar outras tarefas, mas ainda manter os contêineres em execução.

Nas versões mais antigas do CLI:

docker-compose up -d
Bash

Na versão mais recente do CLI:

docker compose up -d
Bash

Com a execução do comando o banco de dados já estará disponível para ser usado.

Acessando o banco de dados

Para acessar o banco de dados via terminal após iniciar o serviço com Docker Compose, você pode utilizar a ferramenta cliente apropriada para o banco de dados que você configurou no seu arquivo docker-compose.yml, no nosso exemplo o MySQL.

docker exec -it NOME_DO_SEU_PROJETO_db_1 mysql -u usuario_db -p
Bash

Substitua “NOME_DO_SEU_PROJETO” pelo nome do seu projeto (geralmente é o nome do diretório onde está seu arquivo docker-compose.yml). Onde usuario_db corresponde ao usuário do banco de dados configurado no  docker-compose.yml.

O Docker executa um comando dentro do contêiner, e neste caso, estamos executando o cliente MySQL interativamente.

Para acessar com um cliente como por exemplo o MySQL Workbench os dados de conexão seriam

  • Host: localhost
  • Port: 3306
  • User: usuario_db
  • Passwd: password

Informações conforme configuradas no docker-compose.yml.

Em meu ambiente uso a extensão do VSCode Mysql que me permite acessar o banco através do próprio VSCode.

Conclusão

Com este guia, você aprendeu que não precisa mais ficar preocupado em instalar todas as ferramentas para montar seu ambiente de desenvolvimento e, aprendeu também, a trabalhar com Docker-compose YAML para subir um banco de dados.

Agora você pode personalizar o arquivo conforme necessário para diferentes tipos de bancos de dados e configurações. O Docker Compose simplifica o processo de gerenciamento de contêineres, tornando o desenvolvimento e a implantação de aplicativos mais eficientes.

Referências

XAMPP

Docker Compose

DockerHub

Deixe 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.