Docker e PHP: conteinerização de aplicações de nível avançado

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

Docker e PHP: conteinerização de aplicações de nível avançado

\n\n

A conteinerização com Docker há muito se tornou o padrão para desenvolvimento e implantação de aplicações PHP. Conhecimentos básicos — executar um contêiner com PHP e Nginx — é apenas o primeiro passo. No nível avançado, é necessário configurar a construção em múltiplos estágios, otimizar o tamanho das imagens, trabalhar com vários serviços, gerenciar variáveis de ambiente, integrar com CI/CD e construir uma arquitetura de microsserviços. Neste artigo, abordaremos as principais técnicas que o ajudarão a elevar a conteinerização PHP a um novo nível.

\n\n

1. Construção em múltiplos estágios (Multi-stage builds) para PHP

\n\n

A construção em múltiplos estágios permite usar várias instruções FROM em um único Dockerfile. Isso é ideal para aplicações PHP, onde na fase de construção são necessários Composer, Node.js e outras ferramentas, mas na imagem final devem entrar apenas os arquivos compilados e um conjunto mínimo de dependências.

\n\n

Exemplo de Dockerfile para uma aplicação Laravel com construção em múltiplos estágios:

\n\n
# Estágio 1: Instalação de dependências e construção\nFROM composer:2.5 AS vendor\nWORKDIR /app\nCOPY composer.json composer.lock ./\nRUN composer install --no-dev --optimize-autoloader --no-interaction\n\nFROM node:18 AS frontend\nWORKDIR /app\nCOPY package.json package-lock.json ./\nRUN npm ci --only=production\nCOPY resources/ ./resources/\nRUN npm run production\n\n# Estágio 2: Imagem final\nFROM php:8.2-fpm-alpine3.18 AS final\nWORKDIR /var/www/html\n\n# Instalação das extensões PHP necessárias\nRUN apk add --no-cache \\\n        libpng-dev \\\n        libjpeg-turbo-dev \\\n        freetype-dev \\\n        libzip-dev \\\n        oniguruma-dev \\\n    && docker-php-ext-configure gd --with-freetype --with-jpeg \\\n    && docker-php-ext-install -j$(nproc) \\\n        pdo_mysql \\\n        mbstring \\\n        gd \\\n        zip \\\n        opcache\n\n# Copiar apenas os arquivos necessários dos estágios anteriores\nCOPY --from=vendor /app/vendor/ ./vendor/\nCOPY --from=frontend /app/public/build/ ./public/build/\nCOPY . .\n\n# Otimização para produção\nRUN php artisan optimize\n\nEXPOSE 9000\nCMD ["php-fpm"]
\n\n

Principais vantagens:

\n
    \n
  • A imagem final contém apenas dependências de runtime (PHP-FPM, extensões, código).
  • \n
  • As ferramentas de construção (Composer, Node.js) não entram em produção.
  • \n
  • Redução significativa do tamanho da imagem (de 800-900 MB para 150-200 MB).
  • \n
\n\n

2. Otimização do tamanho das imagens Docker para PHP

\n\n

Imagens pequenas carregam mais rápido, exigem menos espaço em disco e reduzem a superfície de ataque. Principais estratégias:

\n\n
    \n
  • Use versões alpine das imagens base. php:8.2-fpm-alpine pesa ~50 MB contra ~400 MB da php:8.2-fpm padrão.
  • \n
  • Minimize o número de camadas. Combine comandos RUN com &&.
  • \n
  • Remova arquivos temporários. Após instalar extensões, limpe o cache: docker-php-source delete e apk del .build-deps.
  • \n
  • Use .dockerignore. Exclua .git, node_modules, tests, .env e outros arquivos desnecessários.
  • \n
\n\n

Exemplo de .dockerignore avançado:

\n\n
.git\n.gitignore\n.env\n.env.example\nnode_modules\ntests\nstorage/logs/*\n!storage/logs/.gitkeep\ndocker-compose.yml\nMakefile\nREADME.md
\n\n

3. Docker Compose para projetos PHP complexos

\n\n

Para aplicações PHP que utilizam bancos de dados, filas, cache e servidor web, o docker-compose.yml se torna o arquivo central de configuração. Configurações avançadas incluem:

\n\n
    \n
  • Redes (networks): isole os serviços (por exemplo, o banco de dados não deve estar acessível externamente).
  • \n
  • Volumes:<

Blogs

Book Recommendations