====== 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