Pour ceux qui développent en Symfony, voici un petit article pour démarrer rapidement avec Docker, php-fpm et nginx.

Avant de commencer

  • Installer php 7.1 avec les extensions ext-xml, ext-curl, ext-mbstring, ext-zip (Bien installer la version 7.1 minimum pour obtenir le framework Symfony 4)
  • Installer composer
  • Installer docker et docker-compose

Créons une application Symfony simple

Si vous avez déjà votre application, vous pouvez passer cette étape. Eventuellement, vérifiez juste le nommage des répertoires de base au cas où il faudrait ajuster dans les scripts ci-dessous pour votre cas particulier.

$ composer create-project symfony/website-skeleton simple-app
$ cd simple-app
$ php bin/console server:run

En naviguant sur http://localhost:8000
Vous devriez voir ça

simple-app

Démarrons un server web

créer docker-compose-1.yml

web
    image: nginx:latest
    ports:
        - "8000:80"
$ docker-compose -f docker-compose-1.yml up

En naviguant sur http://localhost:8000/
Vous devriez voir ça

nginx-simple

Ajoutons la configuration du vhost pour Nginx

public/index.html

My website

créer site-2.conf

server {
    index index.html;
    server_name php-docker.local;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /app/public;
}

créer docker-compose-2.yml

web:
  image: nginx:latest
  ports:
    - "8000:80"
  volumes:
    - ./:/app
    - ./site-2.conf:/etc/nginx/conf.d/default.conf
$ docker-compose -f docker-compose-2.yml up

En naviguant sur http://localhost:8000
Vous devriez voir ça

nginx-simple-2

Ajoutons PHP-FPM

créer docker-compose-3.yml

web:
  image: nginx:latest
  ports:
    - "8000:80"
  volumes:
    - ./:/app
    - ./site-3.conf:/etc/nginx/conf.d/default.conf
  links:
    - php
php:
    image: php:7-fpm
    volumes:
      - .:/app

et on met à jour le fichier de configuration du vhost
créer site-3.conf

server {
    index index.php index.html;
    server_name php-docker.local;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /app/public;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}
$ docker-compose -f docker-compose-".yml up

En naviguant sur http://localhost:8000
Vous devriez voir ça

nginx-simple-3

Autre méthode

Ceci n'est évidemment pas L'unique méthode pour avoir une application Symfony qui tourne.
On peut noter:

Resources