Aguarde, carregando...

MySQL do jeito certo em um container docker

MySQL do jeito certo em um container docker
Daniel Crocciari
Por: Daniel Crocciari
Dia 25/01/2024 21h02

Vamos aprender a criar um docker container que realmente pode ajudar o programador a trabalhar com o MySQL

Considero no início deste artigo que você já tenha instalado o ambiente docker em seu computador de trabalho, sendo assim não vou entrar em detalhes de como instalar o ambiente, aqui no blog se você der uma olhada vai encontrar material sobre como fazer isso.

É possível criar um docker container com toda a configuração que você precisa, tipo MySQL, PHP, PHPMyAdmin e por aí vai, mas apesar de parecer muito prático do modo lógico e profissional isso é de longe um dos jeitos que considero menos profissional de se fazer as coisas.

O MySQL é um SGDB que não precisa de nenhuma linguagem para funcionar, ou seja, o que quero dizer é que este Sistema Gerenciador de Banco de Dados não está atrelado ao uso de nenhuma linguagem de programação, sendo assim é bem lógico que o coloquemos em um ambiente docker separado de tudo, assim obtemos um banco de dados forte, configurável e que não precisa estar preso a uma linguagem.

Vamos considerar assim, que você programa em PHP, Python, Delphi e Harbour por exemplo, e assim pode compartilhar as bases de dados que estiverem sob o comando da SGDB MySQL, isso é bem legal e práti do ponto de vista do programador.

Seguimos então diretamente para o passo de criar as configurações necessárias para ter o MySQL rodando em um container totalmente isolado.

Vou passar neste artigo os aspectos gerais da configuração que utilizo em minha estação de trabalho, vou explicar cada parte  e o motivo de usar assim, pelo menos vou tentar, você pode adaptar ao seu uso fazendo da sua forma ou simplesmente replicar, te garanto que funciona muito bem. Aqui utilizo para programar com as seguintes linguagens PHP, Python, Java, Harbour e JavaScript, por hora é nestas que utilizo e os sistemas que fazem uso desta instalação foram criados por estas linguagens. Junto a tudo isso compartilho as bases de dados com sistemas ERP escritos em Python, Delphi e Visual Basic (todos feitos por terceiros, já que não trabalho com criação de ERPs).

Lembro também que outros artigos deste blog vão trazer outras informações de configurações e instalações que tendem ao final ajudar quem realmente quiser ter uma configuração parecida. Utilizo sistema operacional Linux com a ditribuição, conforme ficha abaixo, mas pode ser configurado em qualquer sistema operacional que suporte a tecnologia Docker.

Distributor ID: Linuxmint
Description: Linux Mint 21.3
Release: 21.3
Codename: virginia

Primeira ação é criar o local onde tudo ficará, então para isso criei pastas que ficaram da seguinte forma:

 /home/daniel/Shared/docker

E antes que comecem a criticar por ter criado dentro do meu usuário, gosto de fazer dessa forma e sempre fiz assim, nunca tive problemas e tudo fica sempre nas pastas do meu usuário que facilita para mim na hora da automação do backup e também quando vou para meu usuário de testes posso ter dados diferentes por lá para fazer testes gerais e se quebrar, vou destruir apenas os dados que estão no usuário teste, mas enfim isso é gosto e metodologia para trabalho, você faça da forma que achar melhor para você.

Então dentro da pasta /home/daniel  criei a pasta Shared e depois dentro dela criei a pasta docker, basicamente isso.

Dentro da pasta docker criei uma pasta .mariadb, onde serão armazenados os dados fisicamente, quando o SGDB estiver desligado você pode copiar esta pasta inteira, e se precisar reinstalar é só colocar ela novamente em uma nova instalação e tudo vai funcionar igual antes. Sei que muitos vão achar que é mentira, que não é tão simples, mas fica tranquilo é ali dentro que existe tudo o que o SGDB precisa para esta base de dados funcionar, então problema resolvido, agora podemos tirar cópia física (hard copy) da base de dados se quisermos.

Para quem programa apenas nos últimos 10 anos, talvez isso nem seja muito interessante ou necessário, mas aquele pessoal lá da época dos arquivos físicos (DBFs, DBs, etc) querem de alguma forma ver onde as coisas estão e copiá-las para algum lugar se possível, entendo perfeitamente.

Mas vamos continuar, agora dentro da pasta docker criei uma pasta chamada .config, esta pasta basicamente vai armazenar cada uma das configurações de ambientes que tenho e terei para docker, e vai por mim logo você terá muitos ambientes, ainda mais quando você perceber o quão fácil é usar isso. Para você ter uma idéia, eu sempre instancio um ambiente novo para cada projeto que cada cliente me manda, assim sempre tenho os projetos em locais isolados e livres para serem configurados da forma que for necessária.

Dentro desta pasta .config criei uma pasta chamada 3306-mariadb, o nome da pasta vem do número da porta que o computador vai ouvir no caso 3306 e o ambiente que vai conter, no caso, mariadb, então daí o nome, com o uso você vai entender melhor que isso ajuda muito para identificar configurações e saber em qual porta ela está ou precisa estar.

E agora dentro da pasta 3306-mariadb vamos começar a criar nosso ambiente SGDB MySQL (no caso mariaDB), primeiro crie um arquivo chamado docker-compose.yaml, este é um arquivo de configuração utilizado pelo Docker Compose, uma ferramenta que facilita a definição e execução de aplicativos Docker multi-contêiner. O Docker Compose usa este arquivo para definir os serviços, redes e volumes que compõem um aplicativo Docker. Ele permite que você configure todos os contêineres necessários, as imagens Docker a serem usadas, as portas a serem expostas, as variáveis de ambiente e outras configurações de maneira declarativa.

version: '3'

services:
mariadb:
build:
context: .
dockerfile: .docker/Dockerfile
image: ca-mariadb
networks:
- minha-rede
container_name: mariadb
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: teste
ports:
- "3306:3306"
volumes:
- ../../.mariadb/mariadb_data:/var/lib/mysql
networks:
minha-rede:
external:
name: minha-rede
volumes:
mariadb_data:

Este é o conteúdo que utilizo no meu ambiente de desenvolvimento, lembre-se os arquivos de configuração .yaml precisam obedecer a rigorosa arquitetura de endentamento, um espaço errado e não vai funcionar, sendo assim vou deixar aqui um link para esse mesmo código que vai estar no github (pegue o arquivo no GitHub).

Feito isso, dentro da pasta 3306-mariadb criei uma nova pasta chamada .docker, dentro desta pasta vou criar um arquivo chamado Dockerfile, este é um script de configuração usado pelo Docker para criar uma imagem Docker. Este arquivo contém uma série de instruções que descrevem como configurar o ambiente e os componentes necessários para a aplicação dentro do contêiner. O Dockerfile define tudo, desde a imagem base a ser usada, até os comandos a serem executados para instalar dependências e configurar a aplicação, mas basicamente nosso arquivo vai conter o seguinte:

# Use uma imagem base do MariaDB
FROM mariadb:latest
# Instale o cliente MySQL
RUN apt-get update && apt-get install -y mysql-client

Esse arquivo também esta lá no Github, se você quiser baixar.

Se você fez tudo correto, agora é só compilar e depois executar, assim teremos o MariaDB (MySQL) rodando e ouvindo a porta 3306, para rodar o comando é o seguinte:

Compilar as configurações

Vamos lá, para fazer isso rode os seguintes comandos:

 

cd .config

sudo docker pull mariadb:latest

docker build -t my-mariadb .

cd 3306-mariadb

sudo docker-compose down

sudo docker-compose build

cd ..

Fiz bem detalhado, mas quem é experiente já vai entender os comandos facilmente.

A partir de agora para colocar ligar ou desligar o mariaDB (MySQL) é só rodar os seguintes comandos:

Liga:

sudo docker-compose up -d

Desliga:

sudo docker-compose down

 

Você sempre precisa estar dentro da pasta 3306-mariadb, na verdade como essa é uma instrução básica do docker-compose você sempre precisa estar dentro da pasta do ambiente que você quer ligar ou desligar.

Ao verificar com sudo docker ps você terá a lista de serviços em execução e com certeza o mariaDB (MySQL) vai estar lá rodando na porta 3306.

Espero que este artigo te ajude assim como tem me ajudado por todo o tempo.

 Configuração no GitHub

Veja também:

Confira mais artigos e vídeos do Farol .