Por que todo desenvolvedor PHP deveria dominar o Docker?
\n\nVocê 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\nDocker 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.
O que é containerização e por que ela é importante para PHP?
\n\nContainerizaçã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\nPara 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\nPrincipais 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
Criando seu primeiro Dockerfile para uma aplicação PHP
\n\nVamos 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).
# 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\nEntendendo 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.