Einfache TYPO3 Entwicklung mit Docker

Docker

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.

Leave a Reply