# Docker PHP-FPM 7.3 & Nginx 1.16 on Alpine Linux Example PHP-FPM 7.3 & Nginx 1.16 setup for Docker, build on [Alpine Linux](http://www.alpinelinux.org/). The image is only +/- 35MB large. Repository: https://github.com/TrafeX/docker-php-nginx * Built on the lightweight and secure Alpine Linux distribution * Very small Docker image size (+/-35MB) * Uses PHP 7.3 for better performance, lower cpu usage & memory footprint * Optimized for 100 concurrent users * Optimized to only use resources when there's traffic (by using PHP-FPM's ondemand PM) * The servers Nginx, PHP-FPM and supervisord run under a non-privileged user (nobody) to make it more secure * The logs of all the services are redirected to the output of the Docker container (visible with `docker logs -f `) * Follows the KISS principle (Keep It Simple, Stupid) to make it easy to understand and adjust the image to your needs [![Docker Pulls](https://img.shields.io/docker/pulls/trafex/alpine-nginx-php7.svg)](https://hub.docker.com/r/trafex/alpine-nginx-php7/) [![Docker image layers](https://images.microbadger.com/badges/image/trafex/alpine-nginx-php7.svg)](https://microbadger.com/images/trafex/alpine-nginx-php7) ![nginx 1.16.1](https://img.shields.io/badge/nginx-1.16-brightgreen.svg) ![php 7.3](https://img.shields.io/badge/php-7.3-brightgreen.svg) ![License MIT](https://img.shields.io/badge/license-MIT-blue.svg) ### Breaking changes (26/01/2019) Please note that the new builds since 26/01/2019 are exposing a different port to access Nginx. To be able to run Nginx as a non-privileged user, the port it's running on needed to change to a non-privileged port (above 1024). The last build of the old version that exposed port 80 was `trafex/alpine-nginx-php7:ba1dd422` ## Usage Start the Docker container: docker run -p 80:8080 trafex/alpine-nginx-php7 See the PHP info on http://localhost, or the static html page on http://localhost/test.html Or mount your own code to be served by PHP-FPM & Nginx docker run -p 80:8080 -v ~/my-codebase:/var/www/html trafex/alpine-nginx-php7 ## Configuration In [config/](config/) you'll find the default configuration files for Nginx, PHP and PHP-FPM. If you want to extend or customize that you can do so by mounting a configuration file in the correct folder; Nginx configuration: docker run -v "`pwd`/nginx-server.conf:/etc/nginx/conf.d/server.conf" trafex/alpine-nginx-php7 PHP configuration: docker run -v "`pwd`/php-setting.ini:/etc/php7/conf.d/settings.ini" trafex/alpine-nginx-php7 PHP-FPM configuration: docker run -v "`pwd`/php-fpm-settings.conf:/etc/php7/php-fpm.d/server.conf" trafex/alpine-nginx-php7 _Note; Because `-v` requires an absolute path I've added `pwd` in the example to return the absolute path to the current directory_ ## Adding composer If you need composer in your project, here's an easy way to add it; ```dockerfile FROM trafex/alpine-nginx-php7:latest # Install composer from the official image COPY --from=composer /usr/bin/composer /usr/bin/composer # Run composer install to install the dependencies RUN composer install --optimize-autoloader --no-interaction --no-progress ```