Skip to content
🎉 Launch sale:50% off everything over $22 — automatically applied at checkout· ends Aug 2Shop the sale →
DevOps AI ToolKit
Newsletter

PHP + Nginx Docker Compose Example

PHP-FPM behind Nginx, sharing an application volume.

The compose.yaml

name: php-nginx
services:
  web:
    image: nginx:1.27-alpine
    restart: unless-stopped
    ports:
      - 8080:80
    volumes:
      - ./app:/var/www/html:ro
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
    depends_on:
      - php
  php:
    image: php:8.3-fpm-alpine
    restart: unless-stopped
    volumes:
      - ./app:/var/www/html

Start it up

# Validate the configuration (does not start anything):
docker compose -f compose.yaml config

# Pull images and start in the background:
docker compose -f compose.yaml pull
docker compose -f compose.yaml up -d

# Check status and follow logs:
docker compose -f compose.yaml ps
docker compose -f compose.yaml logs -f

# Stop and remove (named volumes are kept):
docker compose -f compose.yaml down

Services

  • webnginx:1.27-alpine
  • phpphp:8.3-fpm-alpine

Security notes

  • warning
    No healthcheck
    Add a `healthcheck:` that probes a readiness endpoint or a CLI check for the service.
  • warning
    No healthcheck
    Add a `healthcheck:` that probes a readiness endpoint or a CLI check for the service.
  • warning
    No memory limit
    Set a memory limit sized to the workload (e.g. `mem_limit: 512m`).
  • warning
    No memory limit
    Set a memory limit sized to the workload (e.g. `mem_limit: 512m`).
  • warning
    Source-code bind mount (development pattern)
    Bake code into the image; keep bind mounts in a separate `compose.override.yml` used only for local development.
  • warning
    Source-code bind mount (development pattern)
    Bake code into the image; keep bind mounts in a separate `compose.override.yml` used only for local development.

Open the template in the generator to apply one-click hardening.

FAQ

How do I run this PHP + Nginx Docker Compose file?

Save it as compose.yaml, then run `docker compose up -d`. Validate first with `docker compose config` and follow logs with `docker compose logs -f`.

Do I need a version field in the PHP + Nginx Compose file?

No — modern Docker Compose does not require a top-level version field, and this example does not include one.

How do I customize this PHP + Nginx template?

Open it in the free Docker Compose Generator to change images, ports, volumes, networks, environment variables, and health checks visually, then download your compose.yaml.

Independent educational example. "Docker" is a trademark of Docker, Inc. Review and adapt before using in production.