Como faço para usar adminer com mysql no docker? E como posso garantir que os dados do mysql nao ficam perdidas?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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:
- mysqldbRodando 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=bibliotecaRepare 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=bibliotecaTudo 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