Pesquisa de site

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 (33063306) 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 definir MYSQL_ALLOW_EMPTY_PASSWORD=1.
  • MYSQL_RANDOM_ROOT_PASSWORD → uma senha aleatória será gerada quando o contêiner for iniciado. Você deve definir MYSQL_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.

Inicie o ambiente de trabalho MySQL

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.

Artigos relacionados