Sign inSign up

fabiojanio/php

By fabiojanio

•Updated 21 days ago

Ambiente de desenvolvimento PHP com servidor web embutido.

Image
Developer tools
Web servers
0

2.0K

fabiojanio/php repository overview

⁠php:8.5-cli-alpine3.24

Projetei essa imagem de modo que ela seja leve, flexível e versátil no contexto de ambientes de desenvolvimento, ou seja, você NÃO DEVE em hipótese alguma utilizar essa imagem em ambientes produtivos ou pré-produção.

As palavras-chave "DEVE", "NÃO DEVE", "REQUER", "DEVERIA", "NÃO DEVERIA", "PODERIA", "NÃO PODERIA", "RECOMENDÁVEL", "PODE", e "OPCIONAL" presentes em qualquer parte deste repositório devem ser interpretadas como descritas no RFC 2119⁠. Tradução livre RFC 2119 pt-br⁠.

⁠Imagens disponíveis

Caso deseje utilizar essa mesma abordagem mas com outra versão do PHP, consulte meu catalogo de Tags⁠ no Docker Hub.

⁠Componentes principais

  • PHP 8.5.*
  • Composer 2.*
  • Xdebug 3.* (desligado por padrão)
  • curl
  • unzip

⁠Módulos PHP ativos

Lista de módulos ativos presentes na imagem (saída do php -m):

  • bcmath
  • Core
  • ctype
  • curl
  • date
  • dom
  • exif
  • fileinfo
  • filter
  • gd (com suporte a FreeType, JPEG, PNG e WebP)
  • hash
  • iconv
  • intl (com dados ICU completos, incluindo pt_BR)
  • json
  • lexbor
  • libxml
  • mbstring
  • mysqlnd
  • openssl
  • pcntl
  • pcre
  • PDO
  • pdo_mysql
  • pdo_pgsql
  • pdo_sqlite
  • Phar
  • posix
  • random
  • readline
  • redis
  • Reflection
  • session
  • SimpleXML
  • sodium
  • SPL
  • sqlite3
  • standard
  • tokenizer
  • uri
  • xdebug
  • xml
  • xmlreader
  • xmlwriter
  • Zend OPcache
  • zip
  • zlib

⁠Pontos de atenção

  • Porta 80 exposta
  • php.ini de desenvolvimento alocado em /usr/local/etc/php/php.ini
  • Timezone America/Sao_Paulo aplicado tanto ao sistema quanto ao PHP (date.timezone)
  • Xdebug instalado, porém desligado por padrão (xdebug.mode=off) para não penalizar o desempenho

Sugestão: utilize como exemplo o docker-compose.yml⁠ para simplificar o start de um ambiente.

⁠Ativando o Xdebug

O modo do Xdebug PODE ser definido na criação do container por meio da variável de ambiente XDEBUG_MODE, sem necessidade de alterar arquivos de configuração. Com o modo debug ativo, a sessão é iniciada automaticamente a cada requisição e se conecta à IDE em host.docker.internal:9003 (idekey DOCKER):

docker run \
  --name nome_do_container \
  -d \
  -v $(pwd):/app \
  -p 80:80 \
  --user www-data \
  -e XDEBUG_MODE=debug \
  fabiojanio/php:8.5-cli-alpine3.24

Para gerar relatório de cobertura de testes (PHPUnit/Pest), utilize o modo coverage:

docker run \
  --rm \
  -v $(pwd):/app \
  --user $(id -u) \
  -e XDEBUG_MODE=coverage \
  fabiojanio/php:8.5-cli-alpine3.24 vendor/bin/phpunit --coverage-text

Os modos PODEM ser combinados separando-os por vírgula, exemplo: XDEBUG_MODE=debug,coverage. No Linux, o host.docker.internal REQUER o parâmetro --add-host=host.docker.internal:host-gateway.

⁠Iniciar container

Execute essa instrução para montar um volume compartilhado entre host e container:

docker run \
  --name nome_do_container \
  -d \
  -v $(pwd):/app \
  -p 80:80 \
  --user www-data \
  fabiojanio/php:8.5-cli-alpine3.24

Obs: no exemplo acima optei por utilizar o $(pwd) para capturar o caminho absoluto. Note ainda que fiz uso --user para subir o container utilizando um usuário não ROOT, isso não é obrigatório, porém, é mais seguro.

Por padrão essa imagem considera o /app como seu document root. Vamos supor que você instalou o Laravel, este por sua vez considera o subdiretório /public como seu document root, neste caso PODEMOS contornar este problema de forma muito simples. Veja:

docker run \
  --name nome_do_container \
  -d \
  -v $(pwd):/app \
  -p 80:80 \
  --user www-data \
  fabiojanio/php:8.5-cli-alpine3.24 php -S 0.0.0.0:80 -t /app/public

Após a criação do container é possível se conectar a ele desta forma:

docker exec -it nome_do_container sh
⁠Outros exemplos de uso

Os exemplos abaixo representam algumas das possibilidades e facilidades providas por essa imagem.

⁠Baixando e instalando Projetos

Para baixar e instalar o Laravel Framework:

docker run \
  --rm \
  -v $(pwd):/app \
  --user $(id -u) \
  fabiojanio/php:8.5-cli-alpine3.24 composer create-project --prefer-dist laravel/laravel laravel_example

Para baixar e instalar o Yii Framework:

docker run \
  --rm \
  -v $(pwd):/app \
  --user $(id -u) \
  fabiojanio/php:8.5-cli-alpine3.24 composer create-project --prefer-dist yiisoft/yii2-app-basic yii_example
⁠Executar projeto/código PHP

Para subir o Laravel Framework:

docker run \
  --name nome_do_container \
  -d \
  -v $(pwd):/app \
  -p 8080:80 \
  --user www-data \
  fabiojanio/php:8.5-cli-alpine3.24 php artisan serve --host=0.0.0.0 --port 80

Para subir o Yii Framework:

docker run \
  --name nome_do_container \
  -d \
  -v $(pwd):/app \
  -p 8080:80 \
  --user www-data \
  fabiojanio/php:8.5-cli-alpine3.24 php yii serve 0.0.0.0:80

Caso você tenha um index.php na raiz do seu projeto, basta executar:

docker run \
  --name nome_do_container \
  -d \
  -v $(pwd):/app \
  -p 8080:80 \
  --user www-data \
  fabiojanio/php:8.5-cli-alpine3.24

Caso seu Document Root for um subdiretório, exemplo /minha_app/public, você pode fazer assim:

docker run \
  --name nome_do_container \
  -d \
  -v $(pwd):/app \
  -p 8080:80 \
  --user www-data \
  fabiojanio/php:8.5-cli-alpine3.24 php -S 0.0.0.0:80 -t /app/public

⁠Dica

Para maior agilidade e comodidade consulte o docker-compose.yml⁠ que deixei de exemplo para você. Observe que você pode sobrescrever a propriedade command de modo a executar N tarefas no start do container, bem como substituir ou adicionar definições para outros containers. Boa diversão :)

⁠Licença MIT

Para maiores informações, leia o arquivo de licença⁠ disponível neste repositório.

Tag summary

Content type

Image

Digest

sha256:8668c4d53…

Size

65.5 MB

Last updated

21 days ago

docker pull fabiojanio/php