Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

docker-compose.yml para rodar uma aplicação php com mysql /topico 3

Como faço para usar adminer com mysql no docker? E como posso garantir que os dados do mysql nao ficam perdidas?

3 respostas

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

solução!

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