Docker e PHP: conteinerização de aplicações para desenvolvedores

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Por que a conteinerização de aplicações PHP com Docker é necessária?

O desenvolvimento web moderno em PHP raramente dispensa o uso de conteinerização. O Docker permite empacotar sua aplicação com todas as dependências (servidor web, extensões PHP, banco de dados) em um contêiner isolado. Isso garante que a aplicação funcione da mesma forma na máquina local do desenvolvedor, no servidor de teste e no ambiente de produção. Neste artigo, vamos analisar como configurar corretamente o Docker para PHP, criar um projeto pronto e discutir as melhores práticas.



Vantagens de usar Docker com PHP

  • Reprodutibilidade do ambiente: esqueça o problema "funciona na minha máquina".
  • Isolamento: cada aplicação vive em seu próprio contêiner com as versões necessárias do PHP e bibliotecas.
  • Escalabilidade: fácil executar várias instâncias da aplicação com docker-compose.
  • Simplificação de CI/CD: contêineres são ideais para pipelines de build e deploy automáticos.


Criação do Dockerfile para aplicação PHP

Vamos começar pelo mais importante — o arquivo Dockerfile. Ele descreve como a imagem da sua aplicação PHP será construída. Vejamos um exemplo básico para uma aplicação em PHP 8.2 com o servidor web Apache.



# DockerfileFROM php:8.2-apache

# Instalação de extensões PHPRUN docker-php-ext-install pdo pdo_mysql mysqli

# Ativação do mod_rewrite para Apache (útil para frameworks)RUN a2enmod rewrite

# Cópia do código fonte da aplicaçãoCOPY . /var/www/html/

# Alteração do proprietário para permissões corretasRUN chown -R www-data:www-data /var/www/html

# Abrir porta 80EXPOSE 80


Este Dockerfile pega a imagem oficial do PHP 8.2 com Apache, instala os drivers para MySQL e copia seu código. Para projetos mais complexos, como Laravel ou Symfony, será necessária configuração adicional.



Exemplo para Laravel com Nginx e PHP-FPM

Para frameworks modernos, frequentemente se usa a combinação Nginx + PHP-FPM. Aqui está um exemplo de Dockerfile para PHP-FPM:



# Dockerfile.php-fpmFROM php:8.2-fpm

# Instalação de dependências do sistema e extensõesRUN apt-get update && apt-get install -y \ libpq-dev \ libzip-dev \ unzip \ git \ && docker-php-ext-install pdo pdo_mysql zip

# Instalação do ComposerCOPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Cópia do projetoWORKDIR /var/wwwCOPY . .

# Instalação das dependências PHPRUN composer install --no-interaction --optimize-autoloader

# Permissões para LaravelRUN chown -R www-data:www-data /var/www/storage /var/www/bootstrap/cache

CMD ["php-fpm"]


E aqui está a configuração do Nginx, que precisará ser colocada em um contêiner separado via docker-compose:



# default.conf (para Nginx)server {    listen 80;    server_name localhost;    root /var/www/public;

add_header X-Frame-Options "SAMEORIGIN"; add_header X-Content-Type-Options "nosniff";

index index.php;

charset utf-8;

location / { try_files $uri $uri/ /index.php?$query_string; }

location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; }

error_page 404 /index.php;

location ~ \\.php$ { fastcgi_pass php:9000; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; }

location ~ /\\.(?!well-known).* { deny all; }}


Orquestração com docker-compose

Para gerenciar vários contêineres (PHP, Nginx, MySQL), use o docker-compose.yml. Esta é a ferramenta padrão para desenvolvimento e teste locais.



# docker-compose.ymlversion: '3.8'

services: php: build: co

Blogs

Book Recommendations