Como configurar o MySQL com Docker no Linux
Se você é novo no MySQL ou deseja instalar o banco de dados MySQL de forma rápida e fácil, então este artigo é para você. Neste artigo, aprenderemos como configurar o MySQL com Docker e Docker compose no Linux.
Vamos começar configurando o ambiente docker para iniciar o contêiner MySQL.
1. Instale o Docker
Antes de ativar o contêiner docker MySQL, você precisa ter o docker e o docker-compose instalados em sua máquina. Se você não instalou o docker e o docker-compose, consulte os seguintes guias:
- Como instalar o Docker no CentOS
- Como instalar o Docker no Ubuntu
Você também pode consultar os links oficiais da documentação do Docker fornecidos abaixo para saber como configurar o Docker e o Docker Compose.
- https://docs.docker.com/engine/install/
- https://docs.docker.com/compose/install/
Você pode executar os seguintes comandos para verificar as versões docker e docker-compose com as quais está executando.
$ docker --version
Docker version 20.10.11, build dea9396
$ docker-compose --version
docker-compose version 1.29.2, build unknown
2. Baixe a imagem MySQL Docker
Vá para o Docker Hub para obter a imagem do Docker do MySQL. O importante é que você decida qual versão do MySQL irá executar.
Execute o seguinte comando para extrair a imagem MySQL do docker hub para sua máquina.
docker pull mysql:latest
Atenção: Não é necessário usar a tag "latest
", por padrão ela puxará a imagem mais recente.
Para verificar se a imagem está disponível localmente, você pode executar o seguinte comando:
docker images mysql
Exemplo de resultado:
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest b05128b000dd 12 days ago 516MB
Agora a imagem está pronta para girar o contêiner. Você também pode pular esta etapa e executar o comando "docker run
" conforme mostrado na próxima seção, que extrairá a imagem se não estiver disponível localmente.
3. Inicie o contêiner MySQL
Execute o seguinte comando para ativar o contêiner do Docker MySQL:
docker run --name mysql -p 3306:3306 -v mysql_volume:/var/lib/mysql/ -d -e "MYSQL_ROOT_PASSWORD=temp123" mysql
Inicie o contêiner MySQL
Vamos analisar o comando acima e ver o que cada sinalizador faz.
--name
→ Para dar um nome ao seu contêiner. Se você não estiver especificando este sinalizador, o docker atribuirá alguns nomes gerados aleatoriamente.
-p
→ Mapeamento de portas. O MySQL escutará na porta 3306
, então estamos mapeando as portas (3306
→ 3306
) da sua máquina host para o contêiner do docker. Não é necessário que a porta do host seja 3306
, pode ser qualquer uma que esteja disponível para ser utilizada.
Execute o seguinte comando netstat
em sua máquina local para verificar se a porta mapeada está escutando ou não quando o contêiner for iniciado.
netstat -tlnup | grep -i 3306
Exemplo de resultado:
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 168870/docker-proxy
tcp6 0 0 :::3306 :::* LISTEN 168878/docker-proxy
-v
→ Anexe um volume ao contêiner. O comportamento padrão do docker é que ele não persistirá os dados depois que o contêiner for removido, portanto você perderá todos os seus dados.
Para criar armazenamento persistente, criei um volume chamado "mysql_volume
". O MySQL armazena os dados em /var/lib/mysql/
dentro do contêiner e aqui eles são mapeados para o diretório localhost /var/lib/docker/volumes/mysql_volume1/_data
, então seus dados serão persistentes.
Se você deseja saber mais sobre os volumes do docker, dê uma olhada em nosso artigo detalhado sobre o mesmo.
-d
→ Irá iniciar e executar o contêiner em modo desanexado. Se você omitir o sinalizador -d
, você verá os logs de inicialização do contêiner no terminal e terá que abrir uma nova sessão de terminal para se conectar ao contêiner.
-e
→ Variáveis ambientais. Você deve configurar a senha do usuário root do mysql usando qualquer um dos parâmetros abaixo.
MYSQL_ROOT_PASSWORD
→ Configure sua própria senha usando esta variável de ambiente.MYSQL_ALLOW_EMPTY_PASSWORD
→ Senha em branco ou nula será definida. Você deve definirMYSQL_ALLOW_EMPTY_PASSWORD=1
.MYSQL_RANDOM_ROOT_PASSWORD
→ uma senha aleatória será gerada quando o contêiner for iniciado. Você deve definirMYSQL_RANDOM_ROOT_PASSWORD=1
para gerar a senha aleatória.
Se você pular esta etapa, um erro será gerado conforme mostrado abaixo.
Erro de variável ambiental
4. Verifique o status do contêiner MySQL
Você pode verificar o status do contêiner iniciado usando o seguinte comando:
docker ps
Exemplo de resultado:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e1fb895f6f0f mysql "docker-entrypoint.s..." 3 minutes ago Up 3 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
5. Conecte-se ao banco de dados MySQL
Execute o seguinte comando para conectar-se ao contêiner MySQL.
docker exec -it mysql bash
Conecte-se ao banco de dados MySQL como usuário root
executando o seguinte comando. No meu caso, configurei minha própria senha através de MYSQL_ROOT_PASSWORD
.
mysql -u root -p
Conectar ao banco de dados
Se você usou MYSQL_RANDOM_ROOT_PASSWORD=1
ao iniciar o contêiner, poderá obter a senha gerada automaticamente nos logs.
docker logs
docker logs mysql
Senha raiz gerada
A senha root gerada automaticamente será longa e não é algo para ser lembrado. Você pode redefinir a senha root executando a seguinte consulta.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysqlpassword';
Substitua a senha 'mysqlpassword' pela sua própria senha. Você também pode criar seu próprio usuário e conceder-lhe privilégios conforme necessário.
6. Carregar dados de amostra
O principal objetivo da configuração do mysql é carregar alguns dados e executar consultas neles. Existem algumas maneiras de carregar os dados. Eu tenho um arquivo de amostra chamado "load_data.sql
" com as seguintes consultas.
CREATE DATABASE IF NOT EXISTS football;
USE football;
CREATE TABLE IF NOT EXISTS players (
player_name VARCHAR(16) NOT NULL,
player_age INT NOT NULL,
player_club VARCHAR(16) NOT NULL,
player_country VARCHAR(16) NOT NULL
);
INSERT INTO players VALUES ("Messi",34,"PSG","Argentina");
INSERT INTO players VALUES ("Ronaldo",36,"MANU","Portugal");
INSERT INTO players VALUES ("Neymar",29,"PSG","Brazil");
INSERT INTO players VALUES ("Kane",28,"SPURS","England");
INSERT INTO players VALUES ("E Hazard",30,"MADRID","Belgium");
A primeira abordagem será copiar os dados da máquina local para o contêiner docker usando o comando "docker cp
".
docker cp load_data.sql mysql:/tmp
docker exec -it mysql bash
ls -l /tmp/
Agora você pode se conectar ao cliente mysql e executar o comando source ou redirecionar o arquivo para o cliente mysql.
mysql -u root -p
mysql> source /tmp/load_data.sql
Ou
mysql -u root -p < /tmp/load_data.sql
Conecte-se ao banco de dados e consulte sua tabela.
mysql -u root -p
mysql> show databases;
mysql> use football;
mysql> show tables;
mysql> select * from players;
Mesa de Jogadores
A segunda abordagem seria redirecionar o arquivo .sql
ao executar o comando docker exec
.
docker exec -i mysql mysql -u root -p < load_data.sql
7. Configure o contêiner MySQL usando Docker-Compose
Em vez de extrair a imagem e executar o comando docker run
, você pode usar docker-compose para ativar rapidamente o contêiner. Docker-compose é mais adequado quando você tem mais de um contêiner para ser criado.
Crie um arquivo chamado docker-compose.yml
ou docker-compose.yaml
. Copie e cole o seguinte código yaml. É o mesmo que executei manualmente nas seções anteriores.
version: '3.8'
services:
database:
image: mysql:latest
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: temp1234
ports:
- "3306:3306"
volumes:
- mysql_volume:/var/lib/mysql
volumes:
mysql_compose_volume:
Agora execute o seguinte comando que irá ativar o contêiner docker MySQL.
docker-compose up
Inicie o contêiner MySQL com Docker Compose
Execute o seguinte comando para verificar o status do contêiner iniciado usando docker-compose:
docker-compose ps
Exemplo de resultado:
Name Command State Ports
-------------------------------------------------------------------------------------------------
mysql docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp,:::3306->3306/tcp, 33060/tcp
8. Conecte-se ao banco de dados MySQL usando MySQL Workbench
Até agora vimos como conectar-se ao banco de dados usando o cliente mysql de dentro do contêiner. Você também pode se conectar ao banco de dados usando qualquer cliente GUI, como mysql workbench, dbeaver, Heidi SQL, etc.
O importante a ser observado, independentemente de qual cliente GUI você está usando, é qual porta foi mapeada quando você iniciou o contêiner.
No meu caso, mapeei localhost (3306
) -> container (3306
). Portanto, se eu precisar estabelecer uma conexão com o banco de dados, terei que me conectar a localhost:3306
ou 127.0.01:3306
.
Estou usando o MySQL Workbench como meu cliente GUI. Se você não instalou o MySQL Workbench em sua máquina, você pode usar as instruções abaixo para instalá-lo.
8.1. Instale o MySQL Workbench no Linux
Navegue até o site oficial para baixar o arquivo do pacote. Você deve escolher seu sistema operacional para baixar o arquivo .deb
ou .rpm
.
Escolha o sistema operacional para MySQL Workbench
Na próxima etapa, será solicitado que você faça login ou inscrição. Você pode pular o login ou a inscrição clicando na opção "Não, obrigado, basta iniciar meu download".
Pular opção de login ou inscrição
Em sistemas baseados em Debian, instale o MySQL Workbench conforme abaixo:
cd <path to downloaded .deb file>
sudo apt install ./mysql-workbench-community_8.0.27-1ubuntu21.04_amd64.deb
Em sistemas baseados em RHEL, instale o MySQL Workbench conforme abaixo:
cd <path to downloaded .rpm file>
sudo dnf localinstall ./mysql-workbench-community-8.0.27-1.el8.x86_64.rpm
Assim que a instalação for concluída, você pode iniciar o ambiente de trabalho mysql a partir do menu ou do painel.
8.2. Conecte-se ao banco de dados MySQL
Conecte-se ao banco de dados em execução dentro de um contêiner docker. Você deve tentar se conectar a localhost:3306
ou localhost:
dependendo de como seu contêiner está configurado.
Gerenciar conexão MySQL
Antes de se conectar ao banco de dados, você pode pressionar "Testar conexão" para verificar se o ambiente de trabalho MySQL conseguiu se conectar à instância do banco de dados com sucesso.
Testar conexão MySQL
Agora você pode começar a executar suas consultas nas tabelas que criou.
Execute uma consulta de exemplo no MySQL Workbench
9. Conclusão
Neste artigo, vimos como iniciar contêineres MySQL no docker usando os métodos docker run
e docker-compose
. Se você deseja configurar o MySQL para fins de teste ou aprendizagem, o Docker é mais que suficiente.
Espero que isto ajude.