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'
BashNo 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:
BashEm 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
BashNa 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
BashNa versão mais recente do CLI:
docker compose up
BashComo 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
BashNa versão mais recente do CLI:
docker compose up -d
BashCom 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
BashSubstitua “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.