Containerizing PHP and Nginx with Docker: Step‑by‑Step Guide

This tutorial walks through creating a project structure, writing a simple PHP app, configuring Nginx, authoring Dockerfiles, setting up .dockerignore and docker‑compose.yml, and finally building and running the containers so the PHP service is reachable via Nginx on localhost.

php Courses
php Courses
php Courses
Containerizing PHP and Nginx with Docker: Step‑by‑Step Guide

Containerizing a PHP application with Nginx requires creating separate Docker containers for each service and configuring them to work together. The following steps outline a basic Docker setup based on a simple PHP app.

1. Create project structure

Start with a directory layout like:

//projet
├── index.php
├── nginx
│   └── nginx.conf
├── Dockerfile
├── Dockerfile-nginx
└── docker-compose.yml

2. Create PHP application

Add a minimal index.php file at the project root:

<?php
echo "Hello!";

3. Configure Nginx

Write an Nginx configuration file at nginx/nginx.conf:

server {
    listen 80;
    index index.php;
    server_name localhost;
    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    error_page 404 /index.php;
    root /var/www;
    client_max_body_size 20m;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location / {
        try_files $uri $uri/ /index.php?$query_string;
        gzip_static on;
    }
}

4. Write Dockerfile for PHP

FROM php:8.0.2-fpm

WORKDIR /var/www

5. Create Dockerfile for Nginx

Place this file in the project root as Dockerfile-nginx:

FROM nginx:1.19-alpine

WORKDIR /var/www

6. Create .dockerignore

docker-compose
Dockerfile*

7. Write Docker Compose file

version: "3"

services:
  app:
    container_name: app-container
    build:
      context: ./
      dockerfile: ./Dockerfile
    working_dir: /var/www/
    restart: always
    volumes:
      - ./:/var/www
    networks:
      - app-network

  nginx:
    container_name: nginx-container
    build:
      context: ./
      dockerfile: ./Dockerfile-nginx
    restart: always
    ports:
      - "8000:80"
    volumes:
      - ./nginx:/etc/nginx/conf.d
      - ./:/var/www
    depends_on:
      - app
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

The application network connects the PHP and Nginx containers, allowing them to communicate without interfering with the host network.

8. Build and run containers

Execute the following command to build the images and start the services: docker-compose up --build Then open http://localhost:8000 in a browser; you should see the message “Hello!”.

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

DockercontainerizationPHPNginxDocker Compose
php Courses
Written by

php Courses

php中文网's platform for the latest courses and technical articles, helping PHP learners advance quickly.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.