Entwicklungsumgebung mit Docker einrichten

In diesem Bericht geht es darum, dass ich eine PHP-Anwendung entwickeln möchte, und auf meinem lokalen Rechner direkt einen PHP- und MySQL – Server einrichten möchte, um die gerade durchgeführten Änderungen testen zu können. Für eine schnelle Umsetzung habe ich an eine Docker- Lösung gedacht. Da ich aber keine Ahnung habe, wie man das schnell einrichtet, habe ich Perplexity AI gefragt. Folgendes Ergebnis kam dabei raus:

Docker-Compose Setup

Erstellen Sie eine docker-compose.yml Datei mit folgendem Inhalt:

version: '3'
services:
  web:
    image: php:8.2-apache
    ports:
      - "8080:80"
    volumes:
      - ./src:/var/www/html
    environment:
      - PHP_EXTENSION_MYSQLI=1
      - PHP_EXTENSION_PDO_MYSQL=1

Dieses Setup bietet Ihnen:

  1. Ein PHP 8.2 Image mit Apache-Webserver
  2. Port-Mapping von 8080 auf Ihrem MacBook zu Port 80 im Container
  3. Ein Volume, das Ihr lokales src Verzeichnis mit dem Webroot des Containers verbindet
  4. Automatische Installation der mysqli und PDO MySQL Erweiterungen

Verzeichnisstruktur

Erstellen Sie folgende Verzeichnisstruktur:

project/
├── docker-compose.yml
└── src/
    └── index.php

PHP-Testdatei

Erstellen Sie eine index.php Datei im src Verzeichnis mit folgendem Inhalt:

<?php
phpinfo();
?>

Starten des Containers

docker-compose up -d

Testen der Installation

Öffnen Sie einen Webbrowser und navigieren Sie zu http://localhost:8080. Sie sollten die PHP-Info-Seite sehen

Entwickeln von PHP-Seiten

Sie können nun PHP-Dateien im src
Verzeichnis erstellen und bearbeiten. Diese Änderungen werden sofort im
Container reflektiert, ohne dass Sie den Container neu starten müssen

MySQL ergänzen

Um MySQL zu Ihrem Docker-Setup hinzuzufügen und die Daten im Projektordner zu speichern, können Sie die docker-compose.yml Datei erweitern. Hier ist eine aktualisierte Version, die MySQL einschließt und die Daten lokal speichert:

Erweiterte docker-compose.yml

version: '3'
services:
  web:
    image: php:8.2-apache
    ports:
      - '8080:80'
    volumes:
      - ./src:/var/www/html
    environment:
      - PHP_EXTENSION_MYSQLI=1
      - PHP_EXTENSION_PDO_MYSQL=1
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: my_database
      MYSQL_USER: user
      MYSQL_PASSWORD: user_password
    volumes:
      - ./db_data:/var/lib/mysql
    ports:
      - '3306:3306'

Diese Konfiguration fügt einen MySQL-Service hinzu und speichert die Datenbankdaten im Projektordner. Hier sind die wichtigsten Änderungen:

  1. Ein neuer db Service wurde hinzugefügt, der das MySQL 5.7 Image verwendet.
  2. Umgebungsvariablen für MySQL wurden gesetzt, um ein Root-Passwort, eine Datenbank, einen Benutzer und ein Benutzerpasswort zu definieren.
  3. Ein Volume wurde hinzugefügt, das das lokale Verzeichnis ./db_data mit /var/lib/mysql im Container verbindet. Dies stellt sicher, dass die Datenbankdaten im Projektordner gespeichert werden.
  4. Der Port 3306 wurde freigegeben, sodass Sie von Ihrem MacBook aus auf die Datenbank zugreifen können.

Verwendung des erweiterten Setups

  1. Erstellen Sie einen neuen Ordner namens db_data in Ihrem Projektverzeichnis. Dieser wird die MySQL-Daten speichern.
  2. Starten Sie die Container mit dem folgenden Befehl:

    docker-compose up -d
  3. Die MySQL-Datenbank wird nun im db_data Ordner in Ihrem Projektverzeichnis gespeichert. Dies ermöglicht die Persistenz der Daten, auch wenn Sie die Container stoppen oder neu erstellen.
  4. Sie können sich nun von Ihrer PHP-Anwendung aus mit der Datenbank verbinden, indem Sie db als Hostnamen verwenden.

    Verbindung zur Datenbank

    <?php
    $host = 'db';
    $user = 'user';
    $pass = 'user_password';
    $db = 'my_database';
    
    $conn = new mysqli($host, $user, $pass, $db);
    
    if ($conn->connect_error) {
        die("Verbindung fehlgeschlagen: " . $conn->connect_error);
    }
    echo "Erfolgreich verbunden";
    ?>

    Mit diesem Setup haben Sie nun eine vollständige Entwicklungsumgebung mit PHP und MySQL, wobei alle Daten lokal in Ihrem Projektordner gespeichert werden. Dies ermöglicht eine einfache Versionskontrolle und Sicherung Ihrer Entwicklungsumgebung.