Ambiente de Desenvolvimento PHP com Docker - Parte 1 - IDE, PHP & Banco de dados
Fala aí pessoal, como vocês estão? Espero que estejam bem e inspirados também, pois hoje vamos montar um ambiente de desenvolvimento como está descrito no título desse artigo.
A ideia dessa série de artigos é que tenhamos um ambiente pronto para o uso assim que é baixado do git (partirei do pré suposto que vocês conhecem git e seus comandos, pois não irei explicar os comandos em si, caso não conheçam recomendo que estudem como tarefa rsrsrs).
Que fique claro que não vou explicar aqui que Docker é um container, que você faz o pull das imagens e blá blá blá, isso vocês já devem estar cansados de saber e ver internet a fora… Vocês estão aqui para pôr a mão na massa, antes que eu me esqueça os comandos do Docker como docker ps
e outros, também são por conta de vocês… Vamos lá? (sim eu copiei e colei do artigo anterior sobre .Net Core rsrsrs, porém é importante que fique claro).
Do que precisaremos:
- Um sistema operacional (Windows, Linux e/ou Mac) - Sim, já vou começar com as piadas idiotas hehehe.
- Docker - Afff Danilo…
- Docker Compose: Dependendo do SO, leia-se Linux.
- Git: Para o controle de versão.
- Um terminal: Bash, Powershell ou outro de sua preferência.
- Visual Studio Code: Sim, vscode, eu uso ele para PHP me julguem, mas experimentem primeiro ;-)
Este artigo também parte do princípio que vocês não precisarão instalar nada além do Docker e da IDE em seus SOs. Sendo assim, faremos uma rede usando um arquivo docker-compose.yml
.
Deixe que os jogos comecem…
Vamos organizar nosso código com a seguinte estrutura:
app/
|_ .docker
| _ _ Dockerfile
| _ _ vhost.conf
|_ index.php
|_ docker-compose.yml
Para sabermos se funcionou, quando criarmos o index.php vamos colocar algo que ninguém nunca viu, nem usou na vida (selo ironia):
<?php echo phpinfo();
O arquivo Dockerfile
deve conter o conteúdo abaixo:
A linha 3 configura o Docker para que nossa raiz externa seja a pasta de trabalho juntamente com a linha 11 do arquivo docker-compose.yml
que verá mais abaixo.
Para facilitar nossa vida, vamos basear nossa imagem já na imagem do PHP já com Apache como podem ver na linha 1 do arquivo Dockerfile
. Logo precisamos configurar o virtual host do Apache. Segue abaixo:
Finalmente vamos ao maestro que rege essa orquestra toda, o arquivo docker-compose.yml
como segue:
Como citei anteriormente a linha 11 cria um volume, mapeando a pasta raiz do projeto para a pasta /var/www/html
já mapeada na linha 3 do arquivo Dockerfile
que representa nosso projeto dentro do container do PHP.
Na linha 14 temos a definição do banco de dados, aqui usaremos o mariadb, evolução do MySQL (Aguardando os mimimis). Nas linhas de 18 - 22 temos as configurações do banco de dados.
Vamos pôr esse troço para funcionar?
Colocando a orquestra para trabalhar
Após todos esses passos, chegou a hora de rodar para vermos, vamos através de um terminal na pasta do projeto e digite:
$ docker-compose up --build
Esse comando irá fazer o pull das imagens necessárias, construir as nossas imagens e contêineres (leia-se Dockerfile
) e já subir o ambiente em seguida, graças ao parâmetro --build
. Subir o ambiente é responsabilidade do comando up
. Show né comandinho all included.
E agora, Danilo? Ué agora vocês acessem a seguite URL no navegador:
http://localhost/
Caso tenham alterado a porta no arquivo
docker-compose.yml
, adequar na URL.
Um aplicativo para conectar no banco de dados não é exatamente um pré requisito para esse artigo, mas… espero que tenham um aí, usarei o Workbench para mostrar como acessar. Configure uma nova conexão no Workbench como na imagem abaixo. Mas a ideia é que nem desse aplicativo precisaremos, como veremos mais a frente…
E como podem ver na imagem abaixo, destacado em verde, o banco de dados também já foi criado.
Por favor, não deixem de compartilhar, comentar e deixar seu feedback.
Referências:
- https://docs.docker.com/
- https://docs.docker.com/compose/
- https://hub.docker.com/_/php/
- https://git-scm.com/
- https://code.visualstudio.com/
- https://www.mysql.com/products/workbench/
- E um pouco de experiência pessoal e junção de conhecimentos.