====== Docker Symfony Projekt ======
Link: [[https://entwickler.de/docker/mit-php-in-den-containerhafen-einfahren|Artikel auf entwickler.de]]
===== 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 ====
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 ====
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 ====
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