Skip to content


Repository files navigation



Minimal PHP Docker image focused on Laravel applications. It's use is intended for, but can fit in any other PHP use-case.

The images with Nginx include h5bp/server-configs-nginx with a hand picked set of configuration active by default. So if you want to change or add a new server configuration you can include h5bp/... as you see fit.


Simplest example:


About composer

All images currently ship out with Composer 2.x as the default version. If for some reason you still need to use Composer 1.x and cannot make the upgrade, we still ship a composer1 in the images PATH as well, which is latest Composer 1.x version. Feel free to use it while you prepare to move to 2.0.

Available Tags

The image built is kooldev/php which has a bunch of tags available:




Legacy versions

More flavours

We can always extend these images to suit them to our current use case. For example, we have a few extensions for specific use cases:

Environment Variables

Variable Default Value Description
ASUSER 0 Changes the user id that executes the commands
UID 0 Changes the user id that executes the commands (ignored if ASUSER is provided)
COMPOSER_ALLOW_SUPERUSER 1 Allows composer to run with super user
COMPOSER_MEMORY_LIMIT -1 Changes composer memory limit
ENABLE_XDEBUG false Enables the Xdebug extension
PHP_DATE_TIMEZONE UTC Changes timezone used by date/time functions
PHP_MEMORY_LIMIT 256M Changes PHP memory limit
PHP_MAX_INPUT_VARS 1000  Changes how many input variables may be accepted on PHP
PHP_UPLOAD_MAX_FILESIZE 25M Changes PHP maximum size of an uploaded file
PHP_POST_MAX_SIZE 25M Changes PHP max size of post data allowed
PHP_MAX_EXECUTION_TIME 30 Changes PHP maximum time is allowed to run a script
PHP_FPM_LISTEN 9000 Changes the PORT address of the FastCGI requests
PHP_FPM_MAX_CHILDREN 10 Changes the number of child processes to be used on FPM
PHP_FPM_REQUEST_TERMINATE_TIMEOUT 60 Changes FPM timeout to serve a single request


Variable Default Value Description
NGINX_LISTEN 80 Changes the PORT address
NGINX_ROOT /app/public Changes NGINX root directive
NGINX_INDEX index.php Changes the index directive
NGINX_CLIENT_MAX_BODY_SIZE 25M Changes maximum allowed size of the client request body
NGINX_PHP_FPM unix:/run/php-fpm.sock Changes the address of a FastCGI server
NGINX_FASTCGI_READ_TIMEOUT 60s Changes a timeout for reading a response from the FastCGI server
NGINX_FASTCGI_BUFFERS 8 8k Changes the number and size of the buffers used for reading a response
NGINX_FASTCGI_BUFFER_SIZE 16k Changes the size of the buffer used for reading the first part of the response received
NGINX_ENTRYPOINT_WORKER_PROCESSES_AUTOTUNE true Enables auto-tuning of worker processes based on available CPU cores (container instead of host), to disable set it to empty string
NGINX_HTTPS false Enables the HTTPS server
NGINX_LISTEN_HTTPS 443 Port for the HTTPS server to listen
NGINX_HTTPS_CERT /kool/ssl/_.localhost.pem The path in the container for the SSL certificate file
NGINX_HTTPS_CERT_KEY /kool/ssl/_.localhost.key The path in the container for the SSL certificate key file


With docker run:

docker run -it --rm kooldev/php:7.4 php -v

With environment variables:

docker run -it --rm -e ENABLE_XDEBUG=true kooldev/php:7.4-prod php -v

With docker-compose.yml:

  image: kooldev/php:8.2
    - "9773:9773"
    - ".:/app:cached"
    - "$HOME/.ssh/id_rsa:/home/developer/.ssh/id_rsa:cached"
    ASUSER: "${$UID}"


Update images with templates

You should change fwd-template.json for configuration and template folder for the actual base templates.

After any changes, we need to run kool run template to parse the templates and generate all versions folder/files.


The MIT License (MIT). Please see License File for more information.