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.2.*
- Composer 2.*
- curl
- unzip
Lista de módulos ativos presentes na imagem:
- bcmath
- Core
- ctype
- curl
- date
- dom
- fileinfo
- filter
- ftp
- gd
- hash
- iconv
- intl
- json
- libxml
- mbstring
- mysqlnd
- openssl
- pcre
- PDO
- pdo_mysql
- pdo_pgsql
- pdo_sqlite
- Phar
- posix
- readline
- Reflection
- session
- SimpleXML
- sodium
- SPL
- sqlite3
- standard
- tokenizer
- xml
- xmlreader
- xmlwriter
- zlib
- Porta 80 exposta
- php.ini de desenvolvimento alocado em
/usr/local/etc/php/php.ini
Sugestão: utilize como exemplo o docker-compose.yml para simplificar o start de um ambiente. Este contêiner utiliza "America/Sao_Paulo" como timezone default.
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.2-alpine3.18
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.2-alpine3.18 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
Os 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.2-alpine3.18 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.2-alpine3.18 composer create-project --prefer-dist yiisoft/yii2-app-basic yii_example
Para subir o Laravel Framework:
docker run \
--name nome_do_container \
-d \
-v $(pwd):/app \
-p 8080:80 \
--user www-data \
fabiojanio/php:8.2-alpine3.18 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.2-alpine3.18 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.2-alpine3.18
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.2-alpine3.18 php -S 0.0.0.0:80 -t /app/public
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 :)
Para maiores informações, leia o arquivo de licença disponível neste repositório.