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

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

Nico, acabei clicando em solucionado o outro topico, deu tudo certo com o que vc me passou, agora da uma olhada na minha conexao.php da minha aplicação

<?php try { $pdo = new PDO('mysql:host=localhost;dbname=biblioteca', 'root', 'danielroot'); $pdo->exec("set names utf8"); } catch ( PDOException $e ) { echo 'Erro ao conectar com o Banco: ' . $e->getMessage(); exit(1); }

Mudei de acordo com o docker-compose.yml, mas nao funcionou, acho que fiz algo errado, pode me ajudar? Abraços

8 respostas

Oi Daniel,

como vc usa PDO é preciso instalar essa biblioteca na imagem (no outro dockerfile tinha apenas o mysqli). Segue o dockerfile que instala o PDO.

Arquivo php7-apache2-dockerfile:

FROM php:7.2-apache
WORKDIR /var/www/html
RUN docker-php-ext-install pdo_mysql

Repare a instalação do pdo_mysql. No arquivo docker-compose.yml vc não precisa mexer.

Só tenha cuidado pois o comando docker-compose up não recria a imagem automaticamente, por isso vc deve rodar antes:

docker-compose build

Isso vai buildar todas as imagens que foram declaradas no docker-compose.uml (no nosso caso apenas uma). Depois executa docker-compose up para subir todos os container.

Uma vez rodando os container verifique o seu arquivo php. Repare que no string da conexão o host é mysqlAWS (o nome do container com mysql):

<html>
<?php

  try {
    $pdo = new PDO('mysql:host=mysqlASW;dbname=biblioteca', 'root', 'danielroot');
    $pdo->exec("set names utf8");
    echo 'ok!';
  }
  catch ( PDOException $e )
  {
    echo 'Erro ao conectar com o Banco: ' . $e->getMessage();
    exit(1);
  }
?>
</html>

abs

Massa nico, muito Obrigado, voce é um expert haha!

Uma das coisas que acho dificil entender no docker é por exemplo o banco. No meu caso agora deu erro na declaração sql. O banco da minha aplicação, esta rodando no mysql do meu pc aqui, com os usuarios e tudo mais. Como que o docker cria esse banco? Ele comunica diretamente com o mysql local na minha maquina e procura um esquema chamado 'biblioteca'?

Acho dificil a compreensão disso. Nao consigo logar no sistema agora, da esse erro de sql

Oi Daniel, qual é o erro SQL vc está recebendo agora?

Sobre a instalação: Rodando `docker-compose up´ vc sobe dois container, um para apache + php e outro para mysql.

Se vc gostaria de usar o MySQL instalado no seu PC, vc nao precisa desse segundo container. Tudo bem?

abs

Entao, minha ideia é justamente rodar a aplicação como se fosse em um servidor mesmo, dentro dos containeres.

Só que, o que nao entra na minha cabeça, é como a aplicação vai ter acesso, aos dados do usuario por exemplo? para fazer login, para cadastrar, ele precisa das tabelas certo? não entendo como isso funciona, se eu tenho que rodar meu script do banco em algum lugar.

Eu dei uma pesquisada e vi sobre o adminer, acho que ele gerencia essa questao de banco e roda o seu script para voce poder rodar sua aplicação e ela comunicar com o banco, acredito que seja configurado a partir do docker-compose.yml, mas nao sei como fazer isso rsrsrs

Desse jeito que me passou, ja era pra eu conseguir rodar a aplicação com o banco?

O erro é: Não foi possivel executar a declaração sql!

Pois meu sistema é de biblioteca, sistema acadêmico da faculdade, o index. php dele, chama a tela de login.php, uma autenticação de controle de usuarios no sistema

fico no aguardo nico, e obrigado pela paciência

eu acho que agora entendi. vc recebe o erro pois as tabelas nao existem ainda, nem os dados, correto?

vou te passar um docker-compose com adminer configurado para popular o banco. estou sem meu pc agora, amanha vejo isso. tudo bem?

abs

Acredito que seja isso amigo. Isso é um trabalho acadêmico, de um docker para rodar nossa aplicação (biblioteca).Meu Professor disse que agente ir precisar do php e do mysql.

Algumas coisas fluiram outras não.

Fico no teu aguardo Nico, Muito Obrigado!

solução!

Oi Daniel, tem como abrir uma nova duvida no forum com a sua duvida? Assim fica mais claro e organizado para outros alunos.

Já tenho a solução aqui, só falta testar no windows.

abs

deixa comigo meu querido