Immagine Docker Alpine con Nginx + PHP-FPM gestiti da Supervisor. Ottimizzata per applicazioni web che richiedono molte estensioni PHP (Imagick, XSL, mysqli, ecc.) senza pesare sull'immagine finale.
- Nginx come web server
- PHP-FPM come process manager PHP (modello FastCGI)
- Supervisor per mantenere entrambi attivi
- Estensioni PHP abilitate:
calendar,ctype,dom,exif,fileinfo,filter,ftp,gettext,mysqli,pdo_mysql,shmop,sockets,sysvmsg,sysvsem,sysvshm,xsl,opcache,curl,imagick
| File | Ruolo |
|---|---|
Dockerfile |
Build dell'immagine |
nginx.conf |
Configurazione server Nginx |
supervisord.conf |
Gestione dei processi Nginx e PHP-FPM |
Dalla root del repository:
docker build -t nginx-fpm .Puoi specificare un nome/tag diverso:
docker build -t mio-nome/nginx-fpm:v1 .Se usi un'architettura diversa da quella host (es. ARM su Intel):
docker build --platform linux/amd64 -t nginx-fpm .L'immagine base
php:8.1-fpm-alpineviene scaricata automaticamente dal registry se non è già presente localmente.
L'immagine viene compilata automaticamente su GitHub Actions ad ogni push su main o tag v* e pubblicata su GitHub Container Registry con due tag separati:
| Tag | Architettura |
|---|---|
ghcr.io/redenfire/php81-nginx:latest |
amd64 (x86_64) |
ghcr.io/redenfire/php81-nginx:arm |
arm64 |
Pull per architettura amd64:
docker pull ghcr.io/redenfire/php81-nginx:latestPull per architettura arm64 (es. Raspberry Pi, Apple Silicon):
docker pull ghcr.io/redenfire/php81-nginx:armPer una versione con tag specifico (es. v1):
docker pull ghcr.io/redenfire/php81-nginx:v1 # amd64
docker pull ghcr.io/redenfire/php81-nginx:arm-v1 # arm64Se il package non è pubblico, devi prima fare login con
docker login ghcr.io -u NOME_UTENTE --password-stdin. L'immagine:latestè solo amd64: su ARM va usata:arm.
Dopo la build avvia il container:
docker run -d --name nginx-fpm -p 8080:80 nginx-fpmIl container espone la porta 80. Con questo esempio accedi su http://localhost:8080.
Il documento root è /var/www/html. Per montare il tuo codice dal host:
docker run -d --name nginx-fpm -p 8080:80 -v /path/del/tuo/codice:/var/www/html nginx-fpmSenza codice montato la home restituisce 403 (directory /var/www/html vuota). Per testare che PHP-FPM funzioni:
docker exec nginx-fpm sh -c 'echo "<?php echo \"ok \" . PHP_VERSION; ?>" > /var/www/html/index.php'
curl http://localhost:8080/docker stop nginx-fpm
docker rm nginx-fpmPer rimuovere anche l'immagine locale:
docker rmi nginx-fpm- Il container esegue come
rootperché Nginx e Supervisor richiedono privilegi elevati; i worker Nginx/PHP-FPM girano comewww-data. COPY . /var/www/htmlcopia il codice sorgente all'interno dell'immagine. Se usi un volume basta ignorarlo.