Arbeitet man mit dem Mac hat man zwei Möglichkeiten Docker zu verwenden: zum einen der native Docker Client mit den man mehrere Docker Maschinen anlegen kann und zum anderen Docker for Mac ein einfacherer Client der die Vorzüge des Apple Betriebssystem nutzt. Für diesen Artikel wird Docker for Mac vorausgesetzt.

Docker for Mac API

Damit PhpStorm und andere Tools sich gegen Docker for Mac über eine API verbinden kann benötigt man zurzeit noch das Tool socat das sich leicht über Homebrew installieren lässt:

$ brew install socat

Damit socat bei jedem Neustart automatisch gestartet wird kann ein eigener Daemon verwendet werden. Hier eine neue Datei mit den Namen de.core23.socat_launcher.plist erstellen:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>de.core23.socat_launcher</string>
        <key>Disabled</key>
        <false/>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <true/>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/bin/socat</string>
            <string>-d</string>
            <string>TCP-LISTEN:2375,range=127.0.0.1/32,reuseaddr,fork</string>
            <string>UNIX:/var/run/docker.sock</string>
        </array>
        <key>StandardErrorPath</key>
        <string>/Library/Logs/socat_docker.log</string>
        <key>StandardOutPath</key>
        <string>/Library/Logs/socat_docker.log</string>
        <key>StartInterval</key>
       <integer>30</integer>
    </dict>
</plist>

Diese Datei anschließend in das LaunchDaemons Verzeichnis kopieren, die Berechtigungen setzen und als Daemon registrieren:

$ cd /Library/LaunchDaemons/
$ sudo chown root:wheel de.core23.socat_launcher.plist
$ sudo launchctl load de.core23.socat_launcher.plist

Über den folgenden Befehl lässt sich herausfinden, ob die API erreichbar ist

$ curl http://localhost:2375/version

PhpStorm Setup für Docker

Unter PhpStorm -> Preferences -> Build, Execution, Deployment -> Docker eine neue Docker Umgebung anlegen:

Als API URL den Port aus der LaunchDaemons Konfiguration und den Certificates folder auf den lokalen Ordner des Benutzers setzen.

Unter Languages & Frameworks -> PHP -> CLI Interpreter -> ... eine neuen Remote Interpreter anelgen:

Der Image name kann jedes beliebige Docker Image sein, dass einen PHP Interpreter mitliefert. Entweder man verwendet ein offizielle PHP Image oder ein eigenes PHP Image mit weiteren Komponenten.

Zum Schluss noch über Language & Frameworks -> PHP -> PHPUnit -> + -> By Remote Interpreter eine neue PHPUnit Konfiguration anlegen:

Das Path mapping und der Docker container sollte automatisch korrekt gesetzt werden. In diesem Fall ist PHPUnit über composer in dem Projekt eingebunden und auch automatisch gesetzt.

Sollte PHPUnit direkt im Image liegen, muss die Checkbox Path to phpunit.phar ausgewählt werden und der Pfad händisch eingegeben werden