Como faço para usar adminer com mysql no docker? E como posso garantir que os dados do mysql nao ficam perdidas?
Como faço para usar adminer com mysql no docker? E como posso garantir que os dados do mysql nao ficam perdidas?
Oi Daniel, vamos lá!
Para usar o adminer basta declarar o serviço no seu arquivo docker-compose.yml
(arquivo completo mais para baixo). Seque a declaração do service apenas:
mysql-adminer:
image: adminer
restart: always
container_name: mysql-adminer
ports:
- 8081:8080
depends_on:
- mysqldb
links:
- mysqldb
Rodando o docker-compose up
vai subir mais um container com o nome mysql-adminer
. Uma vez rodando, basta acessar http://localhost:8081
e logar com o usuario root (e o server mysqlASW
).
A partir dai vc pode criar as tabelas e popular o banco com dados. Caso queira popular o banco automaticamente no hora de subir os containers aconselho criar um novo dockerfile para buildar a imagem com mysql + dados ( executando um script). Ou, senão quiser buildar uma nova imagem, vc poderia ter na aplicação uma funcionalidade que popular o banco automaticamente (podemos discutir isso no outro post).
Ainda há o problema que os dados salvos do mysql ficam perdidas se vc apague os containers (por exemplo, se vc executa docker-compose down
). Para evitar que os dados somem junto com o container vc pode trabalhar com volumes.
Um volume
é uma pasta no seu computador que o container pode usar/montar. Ou seja, vamos configurar que o container mysqldb
grava os dados no seu computador local, e nao dentro do container.
Segue a definição do service mysqldb
com um volume
:
mysqldb:
container_name: mysqlASW
image: mysql:5.7
restart: always
ports:
- '3307:3306'
volumes:
- ./mysqldata:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=biblioteca
Repare a pasta mysqldata
(que vc precisa criar na mesma pasta onde está o docker-compose.yml
).
Ao subir o novo container mysqlAWS
com essa declaração do volume, todos os dados das tabelas do mysql ficam salvos nessa pasta mysqldata
(e isso vc precisa testar no windows).
Para simplificar, segue o docker-compose.yml
completo:
version: '3'
services:
apache:
build:
dockerfile: php7-apache2-dockerfile
context: .
image: steppat/php7-apache2-dockerfile
container_name: php7-apache2
restart: always
ports:
- '80:80'
volumes:
- ./html:/var/www/html
depends_on:
- mysqldb
links:
- mysqldb
mysql-adminer:
image: adminer
restart: always
container_name: mysql-adminer
ports:
- 8081:8080
depends_on:
- mysqldb
links:
- mysqldb
mysqldb:
container_name: mysqlASW
image: mysql:5.7
restart: always
ports:
- '3307:3306'
volumes:
- ./mysqldata:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=biblioteca
Tudo bem?
abs, Nico
Nico tudo perfeito com a parte do docker, muito obrigado mesmo. Deu tudo certo aqui Eu rodei meu script ja com os dados para o adminer, ai ficou show!
Agora me parece que á um erro em parte da minha aplicação.
Eu consigo cadastrar um usuario tranquilamente. mas nao consigo locar no sistema, olha a mensagem:
Warning: session_start(): Cannot start session when headers already sent in /var/www/html/Biblioteca/logon.php on line 5
senha: e0ffb90b074691c42ebd7b3cc39771b344c0083b
Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/Biblioteca/conexao/conecta.php:1) in /var/www/html/Biblioteca/logon.php on line 43
ele ainda mostra a senha em sha1. Se quiser, te mando os arquivos onde mostram os erros. O que acho estranho e que localmente, ele acessa normal.
Fico no aguardo
Oi Daniel,
E que bom que está funcionando, o Docker pelo menos :)
Agora já que está funcionar, fecha esse topico e abre um novo. Assim fica claro que foi solucionado e e o proximo topico tem o seu foco especifico. Tbm tente dar bastante detalhe sobre o problema, versão e codigo.
abs, Nico