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.
Caso deseje utilizar essa mesma abordagem mas com outra versão do PHP, consulte meu catalogo de Tags no Docker Hub.
- PHP 8.5.*
- Composer 2.*
- Xdebug 3.* (desligado por padrão)
- curl
- unzip
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
- 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.
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.24Para 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-textOs 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.
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.24Obs: 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/publicApós a criação do container é possível se conectar a ele desta forma:
docker exec -it nome_do_container shOs exemplos abaixo representam algumas das possibilidades e facilidades providas por essa imagem.
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_examplePara 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_examplePara 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 80Para 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:80Caso 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.24Caso 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/publicPara 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 :)
Para maiores informações, leia o arquivo de licença disponível neste repositório.