Übersetzungen dieser Seite:
  • de

Docker Symfony Projekt

Inhalt

Das beschriebene docker compose Stack enthält die Komponenten

  • PHP als FPM, mit Installation von Composer
  • Nginx als Webserver mit PHP-FastCGI
  • MySQL
  • phpMyAdmin als Oberfläche zum Verwalten einer Datenbank
  • MailCatcher für den lokalen E-Mail-Versand

Dateien

Hier die Struktur der Ordner und Deteien des Projekts:

[] app               # Hier wird die Symfony-Anwendung installiert
[] nginx             # Nginx Konfiguration
   +-- default.conf
[] mysql             # MySQL Daten
[] php               # PHP Docker Konfiguration
   +-- Dockerfile
docker-compose.yml

docker Compose-Datei

docker-compose.yml
services:
  entw-php:
    build:
      context: ./php
    volumes:
      - ./app:/app
  entw-nginx:
    image: nginx
    ports:
      - 8080:80
    volumes:
      - ./app:/app
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
  entw-mysql:
    image: mysql
    command: [ '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci' ]
    volumes:
      - ./mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
  entw-phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
      - 8081:80
    environment:
      - PMA_HOST=entw-mysql
      - PMA_USER=root
      - PMA_PASSWORD=root
  entw-mailcatcher:
    image: schickling/mailcatcher
    ports:
      - 8082:1080

Nginx-Konfiguration

default.conf
server {
  server_name localhost;
  root /app/public;
 
  location / {
    try_files $uri /index.php$is_args$args;
  }
 
  location ~ ^/index\.php(/|$) {
    fastcgi_pass entw-php:9000;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    fastcgi_param DOCUMENT_ROOT $realpath_root;
    internal;
  }
 
  location ~ \.php$ {
    return 404;
  }
 
  error_log /var/log/nginx/project_error.log;
  access_log /var/log/nginx/project_access.log;
}

PHP Docker-Datei

Dockerfile
FROM php:8.0-fpm
 
# Install packages
RUN apt-get update && \
  apt-get install -y \
  curl \
  unzip \
  git \
  && \
  apt-get clean -y \
  && \
  rm -rf /var/cache/apt /var/lib/apt/lists/*
 
# Install PHP extensions
RUN docker-php-ext-install pdo_mysql
 
# Install Composer
RUN curl -sS https://getcomposer.org/installer \
  | php -- --install-dir=/usr/bin --filename=composer
 
# Set workdir
WORKDIR /app

Nützliche Befehle

Container hochfahren:

$ docker compose up -d

Container runterfahren:

$ docker compose down

Änderungen am PHP Dockerfile vornehmen und das Image neu erstellen:

$ docker compose up -d --build

Konsole im Container betreten:

$ docker compose exec entw-php bash

Symfony-Anwendung installieren:

$ docker compose exec entw-php bash
root@...:/app# composer create-project symfony/skeleton .

Wichtig hier der Punkt am Ende, damit das Symfony-Projekt in diesem Ordner installiert wird, und nicht im Unterordner skeleton.

Container runterfahren und auch die Images entfernt werden:

$ docker compose down --rmi all