Containerização de aplicações PHP com Docker: guia completo 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 todo desenvolvedor PHP deveria dominar o Docker?

\n\n

Você já passou pela situação em que tudo funciona perfeitamente no seu ambiente local, mas no servidor dá aquele "erro fatal" ou tela branca? Ou pior: quando um colega diz "aqui funciona, só rodar composer update" e seu projeto simplesmente quebra? Conhece isso? Então seja bem-vindo ao mundo da containerização de aplicações PHP com Docker.

\n\n

Docker não é apenas um termo da moda. É uma ferramenta que vai mudar para sempre a sua forma de desenvolver. Imagine: você nunca mais vai perder horas configurando ambiente. Chega de instalar XAMPP, OpenServer ou sofrer com versões do PHP. Um simples docker-compose up — e sua aplicação roda em um ambiente isolado e previsível. E esse ambiente pode ser compartilhado com um colega, enviado para o servidor ou até mesmo entregue ao cliente. Neste artigo, vamos explorar a containerização de aplicações PHP do zero: desde o Dockerfile básico até a otimização para produção.

\n\n

O que é containerização e por que ela é importante para PHP?

\n\n

Containerização é uma forma de empacotar sua aplicação junto com todas as suas dependências (PHP, extensões, servidor web, banco de dados) em um ambiente isolado — o container. Diferente das máquinas virtuais, os containers são leves, iniciam em segundos e consomem pouquíssimos recursos.

\n\n

Para PHP, isso é especialmente relevante. Por quê? Porque uma aplicação PHP típica é uma combinação de: PHP-FPM, Nginx ou Apache, MySQL/PostgreSQL, Redis, fila de tarefas. Configurar tudo isso manualmente em cada máquina é um pesadelo. Com Docker, você descreve toda a infraestrutura como código (Infrastructure as Code) e a reproduz com um único comando.

\n\n

Principais vantagens da containerização para o desenvolvedor PHP:

\n
    \n
  • Ambientes uniformes: ambiente local = homologação = produção. Adeus ao "funciona na minha máquina".
  • \n
  • Isolamento de dependências: um projeto em PHP 7.4 pode rodar lado a lado com um projeto em PHP 8.3 no mesmo computador.
  • \n
  • Implantação rápida: basta enviar a imagem para um registry e atualizar o container no servidor.
  • \n
  • Escalabilidade: é fácil adicionar mais containers PHP-FPM sob demanda.
  • \n
\n\n

Criando seu primeiro Dockerfile para uma aplicação PHP

\n\n

Vamos começar pelo mais importante — o Dockerfile. Este é o arquivo de instruções para construir a imagem da sua aplicação. Vamos supor que temos uma aplicação PHP simples em Laravel ou Symfony (o princípio é o mesmo para qualquer framework).

\n\n
# Usamos a imagem oficial do PHP 8.2 com FPM\nFROM php:8.2-fpm-alpine\n\n# Instalamos dependências do sistema\nRUN apk add --no-cache \\\n    nginx \\\n    supervisor \\\n    libpng-dev \\\n    libjpeg-turbo-dev \\\n    freetype-dev \\\n    && docker-php-ext-configure gd --with-freetype --with-jpeg \\\n    && docker-php-ext-install -j$(nproc) pdo_mysql gd opcache\n\n# Copiamos os arquivos de configuração\nCOPY ./docker/nginx.conf /etc/nginx/http.d/default.conf\nCOPY ./docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf\nCOPY ./docker/php.ini /usr/local/etc/php/conf.d/custom.ini\n\n# Instalamos o Composer\nCOPY --from=composer:latest /usr/bin/composer /usr/bin/composer\n\n# Copiamos o código fonte da aplicação\nCOPY . /var/www/html\nWORKDIR /var/www/html\n\n# Instalamos as dependências PHP\nRUN composer install --no-dev --optimize-autoloader\n\n# Permissões de acesso\nRUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache\n\nEXPOSE 80\n\nCMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
\n\n

Entendendo cada parte:

\n
    \n
  • FROM php:8.2-fpm-alpine — usamos uma imagem leve baseada em Alpine Linux. Ela pesa cerca de 50 MB, contra 200+ MB de imagens desktop.
  • \n
  • docker-php-ext-install — comando mágico para instalar extensões PHP diretamente dentro do container.
  • \n
  • COPY --from=composer:latest — construção multi-estágio. Pegamos o binário pronto do Composer da imagem oficial, sem precisar instalar PHP separadamente.

Blogs

Book Recommendations