Suba um contêiner MySQL no Docker
Se você tem pensado se deveria aprender Docker e como isso pode ajudá-lo a desenvolver aplicações, a resposta é sim! Neste artigo eu mostro como você pode subir uma image do MySQL e conectar-se a ele de maneira simples e rápida.

Neste artigo, eu compartilho como você pode subir um contêiner no Docker com uma imagem do MySQL. Adicionalmente, eu demonstro como você pode conectar-se a esse mesmo contêiner usando MySQL Workbench.
O que é MySQL?
MySQL é um sistema de gerenciamento de banco de dados open-source. Ele é desenvolvido e distribuído com o suporte da Oracle Corporation.
Saiba mais em MySQL :: MySQL 8.0 Reference Manual :: 1.2.1 What is MySQL?
O que é Docker?
Docker é uma plataforma aberta para desenvolvimento, envio e execução de aplicativos. O Docker permite que você separe seus aplicativos de sua infraestrutura.
Saiba mais em Docker overview | Docker Documentation.
Para conseguir o Docker rodando no Windows, baixe e instale o Docker Hub através do link Install Docker Desktop on Windows | Docker Documentation.
Baixe uma imagem Docker do MySQL
Em um prompt de comando ou terminal, execute o seguinte:
docker pull mysql/mysql-server:latest

A tag :latest
fará o download da versão mais recente do MySQL. Se você quiser fazer o download de uma versão específica, basta substituir o mais recente (Ex: mysql-server: 8.0).
Instale e inicie o MySQL
Os contêineres do Docker não têm estado. Portanto, se você usar um MySQL em contêiner, perderá todos os seus dados salvos assim que reiniciar o contêiner. Uma maneira de evitar o problema é criar um volume do docker e anexá-lo ao seu contêiner MySQL.
O comando a seguir criará o volume em sua máquina local, que você poderá conectar ao contêiner MySQL posteriormente:
docker volume create mysql-volume

O comando a seguir puxará o servidor MySQL versão 8.0.20 do registro do Docker e instanciará um contêiner do Docker com o nome “mk-mysql”. Ele também anexará o volume “mysql-volume” criado anteriormente com o banco de dados e exporá a porta 3306 para que você possa acessar o banco de dados MySQL fora do contêiner:
docker run --name=horsejo-mysql -p3306:3306 -v mysql-volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql/mysql-server:latest

Vamos analisar este comando para entendê-lo melhor:
run
executa um novo comando em um novo contêiner do Docker.--name
dará um nome ao novo contêiner criado (horsejo).-p
tornará a porta interna do Docker acessível externamente.-e
mudará a senha de root. Aqui você pode inserir a senha que quiser.mysql/mysql-server:latest
especificará qual imagem executar no contêiner recém-criado. Você pode escolher uma versão ou utilizar a tag:latest
.-v
anexa o volume “mysql-volume” criado anteriormente com o banco de dados.
Para verificar se o contêiner foi criado e em execução, podemos executar um comando docker ps (status do processo):
docker ps

Este comando listará todos os contêineres em execução.
Na coluna de status do resultado acima, você pode ver health: starting
. Depois que o contêiner é inicializado e pronto para ser executado, você verá que ele muda para healthy
.
Você também pode verificar o arquivo de registro do contêiner MySQL em execução com o seguinte comando:
docker logs horsejo-mysql

Conectando-se ao servidor MySQL de dentro do contêiner
Para conectar, primeiro executaremos o seguinte comando:
docker exec -it horsejo-mysql bash

Assim que estiver dentro do contêiner, você pode se conectar ao servidor MySQL:
mysql -u root -p

Utilize a mesma senha que especificamos anterior no parâmetro -p
- eu estou utilizando "123456".
E enfim criar um novo banco de dados da seguinte maneira:
CREATE DATABASE MYSQLTEST;

Por padrão, o MySQL restringe outras conexões além da máquina local (neste caso, contêiner Docker) por razões de segurança. Portanto, para se conectar a partir da máquina local, você deve alterar a restrição de conexão:
update mysql.user set host='%' where user='root';

A seguir, execute o seguinte para que as alterações no usuário root tenham efeito:
FLUSH PRIVILEGES;
Conectando-se ao MySQL usando o Workbench
MySQL Workbench é uma ferramenta visual para acessar o MySQL. Ele fornece modelagem de dados, desenvolvimento de SQL e ferramentas de administração para configuração de servidor, administração de usuário, backup e muito mais. O MySQL Workbench está disponível no Windows, Linux e Mac OS X.
Saiba mais em MySQL :: MySQL Workbench.
Uma vez liberada a restrição de conexão, conecte-se ao MySQL através do endereço 127.0.0.1:3306 para conectar-se ao MySQL usando o Workbench.

Você deverá ver a seguinte interface

Se você está recebendo o erro de falha de conexão, tente reiniciar o contêiner ou execute o comando FLUSH PRIVILEGES;
uma vez conectado ao MySQL via bash. Quando você alterou o usuário root para aceitar todos os hosts (%), o MySQL ainda manteve no cache as permissões anteriores.

Interrompendo o contêiner MySQL
Para interropmer o contêiner, basta executar o seguinte comando:
docker stop horsejo-mysql
Excluindo o contêiner MySQL
Para excluir o contêiner, certifique-se de que ele esteja parado. Em seguida, execute este comando:
docker rm horsejo-mysql
Excluindo o volume
docker volume rm mysql-volume
Conclusão
Docker é uma ferramenta muito poderosa que facilita o desenvolvimento. Como pudemos ver neste artigo, subir uma imagem do MySQL é muito simples e deste modo eliminamos a necessidade de se instalar um servidor de banco de dados em sua máquina de desenvolvimento.
Créditos
- Connect to MySQL running in Docker container from a local machine | by Md Kamaruzzaman | Towards Data Science
- How to Run MySql in a Docker Container - Step by Step (dbschema.com)
- Photo by luis gomes from Pexels