PHP RS

Criando um ambiente de desenvolvimento PHP com Docker Compose

DockerCompose

Este artigo explica como você pode usar Docker para configurar seu próprio ambiente de desenvolvimento, pressupondo que você já tem Docker instalado em sua máquina, se você ainda não tem, acesse https://docs.docker.com e siga o passo a posso para instalação no seu sistema operacional.

Container? Ou uma máquina virtual?

Docker usa “imagens” para criar containers. Uma imagem contém um ambiente linux mínimo e geralmente executa uma função específica: um servidor web, servidor de banco de dados…

Com a ajuda de Docker Engine você pode executar “Containers” Docker.

Um container é em muitos aspectos comparável com uma máquina virtual: você pode criar, remover e modificar arquivos.

Para a maioria dos softwares ou linguagens de desenvolvimento há uma variedade de imagens oficiais Docker disponíveis. A única coisa que resta é adicionar seu próprio código ou dados e está pronto.

Quando você vai usar vários containers dentro de um projeto nem sempre é simples. Configurando cada container, vinculando volumes, configurá-lo torna-se uma tarefa de muito trabalho.

Para resolver este problema, temos Docker Compose.

Com Docker Compose é possível definir uma aplicação multi-container. Com um único comando, você pode iniciar o ambiente inteiro!

Neste artigo vamos dar uma olhada no uso básico do Docker Compose para configurar um ambiente de desenvolvimento clássico.

Começando com Docker Compose

Vamos utilizar Docker Compose para configurar um ambiente com dois containers Docker: um servidor web com o Apache e PHP e um servidor de banco de dados com MySQL. Este é um cenário recorrente para quem trabalha com desenvolvimento PHP.

Para a instalação iremos usar as imagens oficiais do Docker Hub.

Container de servidor web

Vamos começar pela criação de um container para o servidor web. Vamos utilizar uma imagem do repositório oficial imagens PHP “php: 5,6 Apache”, para o servidor web que estaremos montando.

Esta é uma imagem útil, uma vez que PHP e Apache já está incorporado.

Como primeiro passo, estaremos criando uma pasta onde vamos colocar todos os arquivos para o servidor web. Vamos dar o nome da pasta de “php”.

Nesta pasta, vamos criar um novo arquivo com o nome “Dockerfile”.

O “Dockerfile” é um arquivo de texto contendo os comandos para construir uma imagem Docker. O arquivo contém o seguinte:

FROM php:5.6-apache
RUN docker-php-ext-install mysqli

No  FROM apontamos qual a imagem que será usanda como base.

No RUN vamos executar um comando de modo que a extensão mysqli será instalada.

Este comando é uma característica da imagem base do PHP, o que torna possível ativar várias extensões de uma maneira fácil. Sempre leia a documentação da imagem que você estará usando, muitas vezes, as imagens têm comandos específicos para ajustar a imagem base.

Neste caso, tendo a necessidade de instalar mais extensões basta adicionar após a do mysqli separado por espaço ou substituir a mesma.

Para este teste, estaremos usando uma página de informações do PHP. Na pasta ‘php’, crie uma nova pasta ‘www’. Nesta pasta iremos colocar todos os arquivos que estão sendo oferecidos pelo servidor web.

Crie um novo arquivo com o nome index.php e adicione o seguinte código:

<?php
phpinfo();
?>

Na pasta do nosso projeto, crie um arquivo chamado docker-compose.yml . Irá conter o seguinte:

php:
  build: ./Dockerfile
  ports:
   - "80:80"
   - "443:443"
  volumes:
   - ./www:/var/www/html

Na primeira linha vai o nome do nosso container, ‘php’.

No ‘build’ é o arquivo com os dados da imagem que iremos utilizar. Queremos utilizar uma nova imagem como base no Dockerfile que acabamos de criar.

Em ‘ports’ vamos definir o mapeamento das portas. Para o nosso servidor web desejamos que as portas 80 e 443 estejam disponíveis. Vamos vincular os portas do container com as do hospedeiro, por exemplo, “host port:container port”. Se a posta 80 já está sendo utilizada no seu host, pode ser mapeada outra porta.

Como etapa final, mas não menos importante, será feito o mapeamento de um volume para o container.

A linha ‘./www:/var/www/html’ significa que ligará a pasta “./www” no host para a pasta “/var/www/html” em nosso container.

Agora execute docker-compose up e a imagem será construída e executada. E, então, utilize o navegador para acessar o IP do servidor, e vamos ver a página phpinfo. Ao finalizar a construção da imagem será exibido o IP da mesma para acesso.

Container de banco de dados

Vamos para o container de banco de dados, que iremos utilizar a seguinte imagem de base MySQL , a partir do Docker Hub.

No arquivo docker-compose.yml adicione as seguintes regras após a definição do container PHP.

db:
  image: mysql:5.7
  volumes:
   - /var/lib/mysql
  environment:
   - MYSQL_ROOT_PASSWORD=phprs
   - MYSQL_DATABASE=phprs

Para o container MySQL também ligar a um volume para os dados do MySQL. Em vez de ligar uma pasta para o container, vamos agora usar um volume Docker. O desempenho é melhor e, portanto, bem adequado para os bancos de dados.

A fim de criar um volume Docker só precisamos informar a pasta que teremos de criar o volume.

Simplificando: a pasta “/var/lib/mysql” no container será vinculada a uma pasta padrão que irá definir no Docker no host.

Com o comando docker inspect podemos localizar o volume do host.

Os parâmetros adicionados na seção “environment” são dependentes da imagem, neste caso, existem algumas variáveis que vão definir qual o valor é passado para o container Docker, por exemplo, a senha de root para o banco de dados e o nome do banco de dados.

Conectando os dois containers

Para garantir que o container PHP e MySQL vão se “falar”, teremos que criar um link.

Isto pode ser feito com uma pequena alteração na docker-compose.yml.

php:
  build: ./Dockerfile
  ports:
   - "80:80"
   - "443:443"
  volumes:
   - ./www:/var/www/html
  links:
   - db
db:
  image: mysql:5.7
  volumes:
   - /var/lib/mysql
  environment:
   - MYSQL_ROOT_PASSWORD=phprs
   - MYSQL_DATABASE=phprs

No container PHP vamos adicionar a seção “links”.

Este vai dizer que deve haver uma conexão com o container MySQL.

Para testar a conexão vamos modificar o nosso arquivo index.php.

<?php
mysqli_connect("db", "root", "phprs") or die(mysqli_error());
echo "Connected to MySQL<br />";
?>

E agora vamos executar docker-compose up ambos os containers serão lançados e ligados. Quando acessar o ip     do serviço web no navegador vai receber a mensagem “Connected to MySQL”.

Se quiser que o ambiente fique pronto e funcionando em segundo plano, execute docker-compose up -d.

Pronto!

Agora você está pronto para utilizar o seu ambiente de desenvolvimento.

Você pode desenvolver sua aplicação, adicionando o código na pasta ‘www’. O mapeamento do volume irá garantir que seus dados serão armazenados com segurança na pasta host “/php/www”.

Graças a Docker Compose seu ambiente de trabalho podem ser facilmente implantado em outras máquinas e, eventualmente, em um ambiente de produção. E uma vez que o ambiente é construído a partir de containers isolados, não haverá problemas com versões de software em sua configuração ou aplicação!

 

The post Criando um ambiente de desenvolvimento PHP com Docker Compose appeared first on Grupo de Programadores PHP do RS | PHPRS.

Powered by WPeMatico