Coding Chronicles [4]: Der Wechsel von nativer Installation zu Docker

Entwicklung mit Docker aufgrund des Umstiegs auf PHP 7.2. Mit Skepsis aufgrund der schlechten Performance von "Docker for Mac" bis zur Migration meines privaten Servers auf Docker.

Coding Chronicles [4]: Der Wechsel von nativer Installation zu Docker
Photo by Ian Taylor / Unsplash
Coding Chronicles [3]: Meine Reise zur eigenen Hosting-Lösung
Die Entdeckung von Laravel führte von lokaler Entwicklung mit Vagrant zu einem eigenen Virtual Private Server mit Ubuntu, begleitet von einem Wechsel zu nginx + PHP-FPM und ersten Schritten in Richtung DevOps.

In meinen letzten Coding Chronicles habe ich erzählt, wie zu meinem ersten Ubuntu Server gekommen bin

To docker, or not to docker, that is the question - Robin Shakespeare

Zwischen 2017 und 2018 haben wir bei STAUDACHER begonnen, Docker für die Entwicklung einzusetzen. An den Grund kann ich mich nicht mehr erinnern, aber ich glaube, wir haben die ersten Projekte auf PHP 7.2 umgestellt, während wir zusätzlich noch Legacy-Software mit älteren Versionen im Einsatz hatten.

An der Erstellung unseres DEV-Containers war ich nicht beteiligt. Mit meiner knapp einjährigen Servererfahrung hätte ich wahrscheinlich auch nicht viel dazu beitragen können. Bei der Einführung war ich ehrlich gesagt auch nicht sonderlich begeistert, aber das lag hauptsächlich daran, dass die Performance von Docker for Mac damals ziemlich unterirdisch war.

Abgesehen von der schlechteren Performance, als alles nativ laufen zu lassen, traten natürlich immer wieder Probleme auf, die auch auf unsere (vermutlich amateurhafte) Konfiguration zurückzuführen waren. Unsere MacBooks hatten eine 512-GB-Festplatte, was dazu führte, dass eine über 250 GB große Docker.raw Datei aus dem Virtual Storage früher oder später für Ärger sorgte. Bei dem Versuch, sie zu bereinigen, habe ich bestimmt auch 2 oder 3 Mal den gesamten Inhalt der Datenbank verloren.

Jedenfalls dauerte es ein paar Monate, bis ich herausgefunden hatte, wie ich debuggen konnte, warum im Browser nur eine leere Seite erschien und nicht das gewünschte Projekt. Und es war natürlich ein gutes Gefühl zu sehen, wie die Features, die ich gebaut hatte, auf der Staging und in Production rannten, während sie lokal so arschlangsam waren.

Ich würde sagen, Docker und ich waren keine Todfeinde, aber wir waren auch keine guten Freunde. Daher sah ich noch keinen Grund, meinen privaten Server auf Docker umzuziehen.

Als wir Ende 2021 den Mac mit M1 vorbestellt haben, konnten wir noch nicht ahnen, dass unsere Config Probleme mit der ARM-Architektur haben würde. So war die Überraschung groß, als sie eintrafen, und wir mussten wohl oder übel auf die native Installation zurückgreifen, diesmal ohne Vagrant. Und wow, war das schnell 🚀.

Mit dem End of Life von PHP 7.4 Ende 2022 waren wir jedoch wieder in der Ausgangssituation, dass wir die Möglichkeit brauchten, PHP 7.4 und 8.2 parallel laufen zu lassen. Docker musste also wieder her und war gar nicht mehr so scheiße, wie ich es in Erinnerung hatte.

Zum Jahreswechsel haben wir den nginx Reverse Proxy durch traefik ersetzt und damit wurde es für mich privat wieder interessanter. Nach ein paar YouTube-Videos war für mich klar, dass ich die Kombination auch außerhalb der Arbeit mal verwenden möchte. Leider kam ich erst einige Monate später im Oktober dazu und musste dann auch noch feststellen, dass es logischerweise aufgrund der Ports nicht parallel auf meinem bestehenden Server laufen konnte.

Der neue Server war schnell bestellt, dann habe ich Docker mit traefik installiert und nach anfänglichen Problemen die ersten Benchmarks laufen lassen - auch nicht schlechter als mein nativ installiertes Setup. Einen weiteren Container habe ich mit Nextcloud und noch einen mit WordPress erstellt - beide liefen ebenfalls ohne Probleme.

Und dann hat es Klick gemacht: Keine apt-Upgrades mehr, die die Config zerstören. Keine nginx Config mehr für jedes Projekt. Nur noch eine unabhängige docker-compose.yml für jedes Vorhaben. Nice!

Ich habe auf den Black Friday 2023 gewartet und mir einen Server zu einem guten Preis bei netcup* gesichert. Meinen anderen Server konnte ich bis Ende Dezember kündigen und so habe ich alle meine Projekte umgezogen und benutze seitdem privat Docker in Production. Es ging schneller als erwartet und diese Erfahrung ist auch der Grund, warum ich mit dem Blog angefangen habe.

In Zukunft wird es also um Installationen und Erfahrungen rund um Docker gehen. Seid gespannt! 😅

* Wenn du planst, einen Server bei netcup zu mieten, nutze gerne meinen 5€ Gutschein (36nc16963616970). Dadurch erhalte ich eine kleine Provision als Dankeschön.