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