Usar um banco de dados contêinerizado local oferece flexibilidade e simplifica a configuração. Ele 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, tornando fácil implantar, gerenciar e escalar bancos de dados em contêineres isolados com apenas alguns comandos.
Neste guia, você aprenderá como:
- Executar um banco de dados contêinerizado local
- Acessar o shell de um banco de dados contêinerizado
- Conectar-se a um banco de dados contêinerizado a partir do seu host
- Persistir dados do banco de dados em um volume
- Limpar o 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 Contêinerizados
1. Executar um Banco de Dados Contêinerizado Local
Os sistemas de banco de dados mais populares, como MySQL, PostgreSQL, 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 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 o Docker Desktop GUI ou CLI. Para executar um container usando o CLI, execute o seguinte comando em um terminal:
$ docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest
Neste comando:
--name my-mysql
atribui o nomemy-mysql
ao seu container para facilitar a referência.-e MYSQL_ROOT_PASSWORD=minha-senha-secreta
define a senha raiz para o MySQL comominha-senha-secreta
. Substituaminha-senha-secreta
por uma senha segura da sua escolha.-e MYSQL_DATABASE=minhadb
opcionalmente cria um banco de dados chamadominhadb
. Você pode alterarminhadb
para o nome desejado do banco de dados.-d
executa o container em modo desacoplado, ou seja, ele roda em segundo plano.mysql:latest
especifica que você deseja usar a versão mais recente da imagem do MySQL.
Para verificar se o seu container está em execução, rode docker ps
em um terminal:
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 Container
Quando um banco de dados é executado dentro de um container Docker, você pode precisar acessar seu shell para gerenciar o banco de dados, executar comandos ou realizar tarefas administrativas. O Docker oferece uma maneira simples de fazer isso usando o comando docker exec
. Adicionalmente, você pode usar a interface gráfica do Docker Desktop, se preferir.
Se você ainda não tem um container de banco de dados em execução, consulte Executar um Banco de Dados Local em um Container. Para acessar o terminal de um container MySQL usando a CLI, você pode usar o seguinte comando docker exec
.
docker exec -it my-mysql bash
Neste comando:
docker exec
informa ao Docker que você deseja executar um comando em um container 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 container MySQL. Se você nomeou seu container de forma diferente quando o executou, use esse nome em vez disso.- O comando que você deseja executar dentro do container é bash. Ele abre um shell Bash que permite interagir com o sistema de arquivos do container e os aplicativos instalados.
- Após executar este comando, você terá acesso ao shell bash dentro do seu container MySQL, a partir do qual pode gerenciar seu servidor MySQL diretamente. Você pode executar Exit para retornar ao seu terminal.
Verifique se o container Docker está em execução.
run docker ps
Uma vez que você acessou o terminal do container, pode executar qualquer ferramenta disponível nesse container. O exemplo a seguir (Image) mostra usar o MySQL no container para listar os bancos de dados.
Mysql -u root -p
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 apenas persistentes até que usemos o mesmo container; todos os dados serão perdidos assim que recriarmos ou construímos um novo container.
Você pode validar saindo do container e re-logando no banco de dados do container para ver se os dados existem. Você verá que os dados ainda existem no banco de dados enquanto o container estiver em execução.
3. Conectar a um Banco de Dados em um Container a Partir do Seu Host
Conectar 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 seja 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 banco de dados MySQL.
Antes de começar, você deve remover quaisquer containers que você executou anteriormente para este guia. Para parar e remover um container, ou:
- Em um terminal, execute docker remove
--force my-mysql
para remover o container chamadomy-mysql
; - OU, no Docker Dashboard, selecione o ícone Excluir ao lado do seu container na visualização de Containers.
Em seguida, você pode usar a GUI do Docker Desktop ou o CLI para executar o container com a porta mapeada.
docker run -p 3307:3306 --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest
În este 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 dados do banco de dados em um volume Docker é necessário para garantir que seus dados sobrevivam a reinícios e remoções de containers. Um volume Docker permite armazenar arquivos de banco de dados fora da camada gravável do container, facilitando a atualização do container, troca de bases e compartilhamento de dados sem perda. Você pode anexar um volume ao seu container de banco de dados usando o Docker CLI 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 todos os contêineres que executou anteriormente para este guia.
Em seguida, você pode usar a GUI do Docker Desktop ou a 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 um nome de volume e o caminho onde o banco de dados armazena seus dados dentro do contêiner. Se o volume não existir, o Docker cria 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.
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.
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.
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.
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.
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.
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:
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 agilizar 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 microsserviços, 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