Como executar um banco de dados MySQL em um contêiner Docker

Usar um banco de dados containerizado local oferece flexibilidade e simplifica a configuração. Permite replicar de perto o ambiente de produção sem a complexidade das instalações tradicionais de banco de dados. O Docker facilita esse processo, permitindo deploying, gerenciamento e dimensionamento de bancos de dados em contêineres isolados com apenas alguns comandos.

Neste guia, você aprenderá a:

  • Executar um banco de dados containerizado local
  • Acessar o shell de um banco de dados containerizado
  • Conectar-se a um banco de dados containerizado do seu host
  • Persistir dados do banco de dados em um volume
  • Limpeza do laboratório

Prerequisitos

Para seguir este guia, você deve ter o Docker instalado. Para instruções de instalação, por favor, consulte o site do Docker.

Guia Passo a Passo para Configurar Bancos de Dados Containerizados

1. Executar um Banco de Dados Containerizado Local

Os sistemas de banco de dados mais populares, como MySQLPostgreSQL, e MongoDB, têm imagens oficiais do Docker disponíveis no Docker Hub. Essas imagens selecionadas seguem as melhores práticas, garantindo que você tenha acesso às últimas funcionalidades e atualizações de segurança. 

Para começar, visite o Docker Hub e pesquise pelo banco de dados em que você está interessado. Cada página da imagem fornece instruções detalhadas sobre como executar o container, personalizar sua configuração e configurar o banco de dados para atender às suas necessidades. Para mais informações sobre a imagem do MySQL fornecida neste guia, consulte a página da imagem do MySQL no Docker Hub.

Para executar um container de banco de dados, você pode usareither a GUI do Docker Desktop ou o CLI. Para executar um container usando o CLI, execute o seguinte comando em um terminal:

Shell

 

$ docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest

 

Este comando:

  • --name my-mysql atribui o nome my-mysql ao seu container para uma referência mais fácil.
  • -e MYSQL_ROOT_PASSWORD=my-secret-pw define a senha raiz para o MySQL como my-secret-pw. Substitua my-secret-pw por uma senha segura da sua escolha.
  • -e MYSQL_DATABASE=mydb opcionalmente cria um banco de dados chamado mydb. Você pode mudar mydb para o nome desejado do banco de dados.
  • -d executa o contêiner em modo desacoplado, ou seja, ele é executado em segundo plano.
  • mysql:latest especifique que você deseja usar a versão mais recente da imagem do MySQL.

Para verificar se seu contêiner está em execução, execute docker ps em um terminal:

Shell

 

run docker ps

Você também pode verificar o mesmo no console do Docker Desktop:

2. Acessar o Shell de um Banco de Dados em um Contêiner

Quando um banco de dados é executado dentro de um contêiner Docker, você pode precisar acessar seu shell para gerenciar o banco de dados, executar comandos ou realizar tarefas administrativas. O Docker fornece uma maneira simples de fazer isso usando o comando docker exec. Além disso, você pode usar a interface gráfica do Docker Desktop, se preferir.

Se você ainda não tiver um contêiner de banco de dados em execução, consulte Executar um Banco de Dados Local em um Contêiner. Para acessar o terminal de um contêiner MySQL usando a CLI, você pode usar o seguinte comando docker exec.

Shell

docker exec -it my-mysql bash 

Neste comando:

  • docker exec informa o Docker que você deseja executar um comando em um contêiner em execução.
  • -it garante que o terminal que você está acessando seja interativo, para que você possa digitar comandos nele.
  • my-mysql é o nome do seu contêiner MySQL. Se você nomeou seu contêiner de forma diferente ao executá-lo, use esse nome em vez disso.
  • O comando que você deseja executar dentro do contêiner é bash. Ele abre um shell Bash que permite interagir com o sistema de arquivos do contêiner e os aplicativos instalados.
  • Após executar este comando, você terá acesso ao shell Bash dentro do seu contêiner MySQL, a partir do qual pode gerenciar diretamente seu servidor MySQL. Você pode executar Exit para retornar ao seu terminal.

Verifique se o contêiner Docker está em execução.

Shell

 

run docker ps

Uma vez que você tenha acessado o terminal do contêiner, pode executar qualquer ferramenta disponível nesse contêiner. O exemplo a seguir (Image) mostra usar o MySQL no contêiner para listar os bancos de dados.

Shell

Mysql -u root -p

MySQL

 

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| sys                |

+--------------------+

5 rows in set (0.00 sec)

 

mysql> create database testdb;

Query OK, 1 row affected (0.11 sec)

 

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| sys                |

| testdb             |

+--------------------+

6 rows in set (0.00 sec)

 

mysql> connect testdb;

Connection id:    12

Current database: testdb

 

mysql> SHOW TABLES;

Empty set (0.02 sec)

 

mysql> create table test (id numeric,fname varchar(20));

Query OK, 0 rows affected (0.10 sec)

 

mysql> SHOW TABLES;

+------------------+

| Tables_in_testdb |

+------------------+

| test             |

+------------------+

1 row in set (0.00 sec)

 

mysql> insert into test values (1,'arvind');

Query OK, 1 row affected (0.08 sec)

 

mysql> commit;

Query OK, 0 rows affected (0.00 sec)

 

mysql> select * from test;

+------+--------+

| id   | fname  |

+------+--------+

|    1 | arvind |

+------+--------+

1 row in set (0.00 sec)

A tabela que criamos e os dados que salvamos na tabela de teste são persistentes apenas enquanto usamos o mesmo contêiner; todos os dados serão perdidos assim que recriarmos ou construímos um novo contêiner.

Você podevalidar saindo do contêiner e re-logando no banco de dados do contêiner para ver se os dados existem. Você verá que os dados ainda existem no banco de dados enquanto o contêiner estiver em execução.

3. Conectar a um Banco de Dados em um Contêiner a Partir do seu Host

the
Conectar-se a um banco de dados containerizado a partir da sua máquina hospedeira envolve mapear uma porta dentro do container para uma porta na sua máquina hospedeira. Este processo garante que o banco de dados dentro do container é acessível através da rede da máquina hospedeira. Para MySQL, a porta padrão é 3306. Ao expor esta porta, você pode usar várias ferramentas de gerenciamento de banco de dados ou aplicativos na sua máquina hospedeira para interagir com seu MySQL database.

Antes de começar, vous deve remover qualquer contêiner que você executou anteriormente para este guia. Para parar e remover um contêiner, ou:

  • No terminal, execute docker remove --force my-mysql para remover o contêiner chamado my-mysql;
  • OU, no Docker Dashboard, selecione o ícone Excluir ao lado do seu contêiner na visualização de Contêineres.

Em seguida, você pode usar a GUI do Docker Desktop ou o CLI para executar o contêiner com a porta mapeada.

Shell

 

docker run -p 3307:3306 --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest

Neste comando, -p 3307:3306 mapeia a porta 3307 na hospedeira para a porta 3306 no container.

4. Persistir dados do banco de dados em um Volume

Persistir os dados do banco de dados em um volume Docker é necessário para garantir que seus dados sobrevivam a reinícios e remoções de contêineres. Um volume Docker permite armazenar arquivos de banco de dados fora da camada gravável do contêiner, tornando possível atualizar o contêiner, alternar bases e compartilhar dados sem perdê-los. Você pode anexar um volume ao seu contêiner de banco de dados usandoeither o CLI do Docker ou a GUI do Docker Desktop.

Nota: Novamente, como feito anteriormente na seção Conectar a um Banco de Dados Containerizado, antes de começar, você deve remover quaisquer contêineres que executou anteriormente para este guia.

Em seguida, você pode usar a GUI do Docker Desktop ou o CLI para executar o contêiner com um volume.

Para executar seu contêiner de banco de dados com um volume anexado, inclua a opção —v com seu comando docker run. Isso especifica o nome do volume e o caminho onde o banco de dados armazena seus dados dentro do contêiner. Se o volume não existir, o Docker criará automaticamente para você.

Para executar um contêiner de banco de dados com um volume anexado, verifique se os dados persistem. Execute o contêiner e anexe o volume.

Shell

docker run –name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -v my-db-volume:/var/lib/mysql -d mysql:latest

Este comando monta o volume chamado my-db-volume no diretório /var/lib/mysql dentro do contêiner.

Crie alguns dados no banco de dados. Use o comando docker exec para executar o MySQL dentro do contêiner e criar uma tabela.

Shell

docker exec my-mysql mysql -u root -pmy-secret-pw -e "CREATE TABLE IF NOT EXISTS mydb.mytable (column_name VARCHAR(255)); INSERT INTO mydb.mytable (column_name) VALUES ('value');"

 

Este comando usa a ferramenta MySQL no contêiner para criar uma tabela chamada mytable com uma coluna chamada column_name, e finalmente, insere um valor.

Parar e remover o contêiner. Sem um volume, a tabela que você criou será perdida quando você remover o contêiner.

Shell

docker remove --force my-mysql

Inicie um novo contêiner com o volume anexado. Desta vez, você não precisa especificar nenhuma variável de ambiente, pois a configuração está salva no volume.

Shell

docker run --name my-mysql -v my-db-volume:/var/lib/mysql -d mysql:latest

Verifique se a tabela que você criou ainda existe. Em seguida, use o comando docker exec novamente para executar o MySQL dentro do contêiner.

Shell

docker exec my-mysql mysql -u root -pmy-secret-pw -e "SELECT * FROM mydb.mytable;"

 

Este comando usa a ferramenta MySQL no contêiner para selecionar todas as registros da tabela table. Você deve ver uma saída como a seguinte. 

SQL

 

column_name

value

5. Limpe a Imagem do Contêiner MySQL

Para remover um contêiner, use o comando docker remove com os nomes ou IDs dos contêineres separados por espaços. Por exemplo:

Shell

 

docker remove --force 90b8831a4b8
docker remove --force 36252896d6ff
docker remove --force d86dff3809e8

Conclusão

Em última análise, executar o MySQL com Docker oferece uma solução portátil, escalável e eficiente para a gestão de banco de dados. Os contêineres isolados do Docker ajudam a simplificar a implantação, reduzem problemas de compatibilidade e otimizam o uso de recursos. Ao permitir o controle de versão fácil e a redefinição de ambientes, o Docker suporta o desenvolvimento e testes rápidos. É ideal para gerenciar bancos de dados MySQL em microservices, facilitando a implantação e a escalabilidade enquanto mantém um desempenho forte.

Source:
https://dzone.com/articles/guide-for-running-mysql-database-in-docker-container