Als ich vor ein paar Tagen meine erste Entwicklungsumgebung, mit Docker für TYPO3 anlegen wollte, bekam ich zunächst Probleme bei der Installation von Docker for Mac. Meine CPU ist zu alt und wird von der aktuellen Docker Version für Mac nicht unterstützt. Recht schnell fand ich Docker Desktop, welches scheinbar speziell für ältere Rechner zur Verfügung gestellt wird. Cool, Docker läuft.
Für TYPO3 fand ich das Image martinhelmich/typo3. Martin beschreibt sehr gut in seinem Blog wie man damit umgeht. Was er leider nicht verrät, ist wie man damit Dateien auf dem Host bearbeiten kann. In den Kommentaren findet sich zwar ein Ansatz:
$ docker run -d --name typo3-web --link typo3-db:db \
--volume /pfad/zum/projekt/typo3conf:/var/www/typo3conf \
--volume /pfad/zum/projekt/fileadmin:/var/www/fileadmin \
--volume /pfad/zum/projekt/uploads:/var/www/uploads
Und damit werden die Host Verzeichnisse auch in den Container eingebunden, aber die Rechte der Verzeichnisse passen nicht, da die Rechte des Hosts übernommen werden. Sehr ärgerlich, denn mit einem readonly /typo3conf kann man nicht viel mit TYPO3 anfangen.
Aber man muss ja auch gar nicht das komplette /typo3conf mounten. Mir genügt es wenn ich meine Extension Verzeichnisse auf dem Host anlegen kann und sie einzeln in das Container /typo3conf Verzeichnis mounte.
$ docker run -d --name typo3-web --link typo3-db:db \
--volume /pfad/zum/projekt/typo3conf/my_new_extension:/var/www/typo3conf my_new_extension
Container Daten auf den Host kopieren:
docker cp ###deine_container_id###:/var/www/html/fileadmin/introduction/ /pfad/zum/projekt/
Damit ich nun nicht immer meine Container einzeln starten muss, habe ich mir diese docker-compose.yml angelegt.
version: "2"
services:
mysql:
image: ${DB_IMAGE}
container_name: ${APP_NAME}_database
command:
- --character-set-server=utf8
- --collation-server=utf8_unicode_ci
environment:
- "MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}"
- "MYSQL_DATABASE=${DB_NAME}"
- "MYSQL_USER=${DB_USER}"
- "MYSQL_PASSWORD=${DB_PASSWORD}"
volumes:
- database:/var/lib/mysql
extensions:
image: busybox
container_name: ${APP_NAME}_extensions
volumes:
- ./Extensions/lgv_site_package:/var/www/html/typo3conf/ext/lgv_site_package
typo3:
image: martinhelmich/typo3:${TYPO3_VERSION}
container_name: ${APP_NAME}_typo3_${TYPO3_VERSION}
ports:
- ${APP_PORT}:80
volumes:
- fileadmin:/var/www/html/fileadmin
- typo3conf:/var/www/html/typo3conf
- uploads:/var/www/html/uploads
volumes_from:
- extensions
links:
- mysql:db
volumes:
database:
fileadmin:
typo3conf:
uploads:
APP_NAME=T3_Docker
APP_PORT=80
TYPO3_VERSION=latest
DB_IMAGE=mysql:5.7
DB_ROOT_PASSWORD=root
DB_NAME=typo3
DB_USER=typo3
DB_PASSWORD=typo3
Wie anfangs erwähnt ist mein MAC schon etwas älter. Bislang habe ich meine lokale Entwicklung mit MAMP umgesetzt. Aktuell stand ich aber vor einem Problem. TYPO V9 benötigt PHP 7.2. Aber PHP 7.2 ist mit meinem auch etwas älterem MAMP nicht verfügbar. Dank Docker ist das alles nun kein Problem mehr.