Containerization of PHP and Nginx
Hamza Sehouli
Posted on January 5, 2024
Containerizing PHP and Nginx involves creating Docker containers for each service and configuring them to work together. Below are the steps involved in creating a basic Docker configuration for PHP and Nginx. This example is based on a simple PHP application.
1- Create the project structure :
Start by creating the project with the following structure:
//projet
├── index.php
├── nginx
│ └── nginx.conf
├── Dockerfile
├── Dockerfile-nginx
└── docker-compose.yml
2- Create a PHP application :
Create a simple PHP application. For example, in the root "./index.php" :
<?php
echo "Hello!";
3- Configure Nginx :
Create an Nginx configuration file in 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 the Dockerfile :
FROM php:8.0.2-fpm
WORKDIR /var/www
5-Create a Dockerfile-nginx file for Nginx in the root of the project:
FROM nginx:1.19-alpine
WORKDIR /var/www
6- Create a .dockerignore file in the root of the :
docker-compose
Dockerfile*
7- Write the Docker Compose file :
Create a docker-compose.yml file in the project root:
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
We've created an app-network, because we're containerizing PHP and Nginx separately with the same network, since the containers have a network isolated from our local system.
8- Build and run containers :
docker-compose up --build
Access the application:
Open your browser and go to http://localhost:8000. You should see the message "Hello!".
Posted on January 5, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.