Ruby on Rails mit Docker für die lokale Entwicklungsumgebung
Mikhail Tereschenko
2. November 2022
0 Min. LesezeitHallo, Ruby-Entwicklerinnen und -Entwickler! Wenn Sie nach einer effektiven Möglichkeit suchen, Ruby on Rails mit Docker in Ihrer lokalen Entwicklungsumgebung einzurichten, ist dieser Beitrag genau richtig für Sie. Er knüpft an unseren vorherigen Artikel darüber an, wie Sie Ruby unter macOS für die lokale Entwicklung installieren.
Ruby-Entwicklerinnen und -Entwickler müssen bei der Entwicklung eines Ruby-on-Rails-Projekts häufig eine Datenbank sowie weitere Voraussetzungen für die Entwicklungsumgebung berücksichtigen. Es kann jedoch eine Herausforderung sein, sicherzustellen, dass all diese Komponenten auf Ihrem Hostbetriebssystem installiert sind und genau die erforderlichen Versionen verwenden.
Jedes Mal, wenn ich ein neues Projekt erstellen wollte, wünschte ich mir einen Button, der dafür eine neue, saubere Umgebung einrichtet. Deshalb habe ich eine Docker-gestützte Umgebung erstellt, die sich mit Docker docker-compose.yml ganz einfach starten und stoppen lässt.
Was ist Docker Compose?
Docker Compose ist ein Infrastructure-as-Code-Tool (IaC), mit dem Sie Anwendungen und Dienste wie Proxys, Datenbanken und Volume-Mounts konfigurieren und miteinander verbinden können, um sie wiederverwendbar bereitzustellen. Es ist im Docker-Softwarepaket enthalten und wird mit YAML definiert.
Diese Docker-Compose-Konfiguration für eine lokale Entwicklungsumgebung eignet sich für verschiedene Projekttypen und ist nicht nur auf Ruby on Rails beschränkt. Sie kann auch für Nebenprojekte oder clientseitige Frontend-Projekte verwendet werden. Die wichtigsten Gründe, warum ich Docker-Umgebungen Änderungen am eigenen Hostbetriebssystem vorziehe, sind:
einfach zu konfigurieren
Logik einfach von der Umgebung zu trennen
dieselbe Umgebung problemlos für verschiedene Projekte zu verwenden
die Umgebung problemlos mit allen zu teilen, die Hilfe benötigen, ohne vertraulichen Code weiterzugeben
der Hostcomputer bleibt sauber
Eine Ruby-on-Rails-Docker-Umgebung
Um eine Ruby-on-Rails-Docker-Umgebung für die lokale Entwicklung einzurichten, benötigen Sie Folgendes:
Ein Unix-ähnliches Betriebssystem (ich verwende macOS, Sie können aber Ubuntu oder eine andere Linux-Distribution nutzen. Windows sollte ebenfalls funktionieren)
make (Version 3.81 oder höher)
Docker (Version 19.03.12 oder höher)
docker-compose (Version 1.26.0 oder höher)
Ihr bevorzugter Texteditor (in meinem Fall Visual Studio Code)
Sobald Sie all das haben, können Sie loslegen. Falls Sie nicht lesen möchten: Hier finden Sie das Open-Source-Repository mit allen erforderlichen Anweisungen und dem vollständigen Quellcode zu den Codeausschnitten, die wir uns ansehen. Da Sie bereits hier sind, folgen Sie einfach dieser Schritt-für-Schritt-Anleitung.
Zunächst erstelle ich der Einfachheit halber ein Ruby-on-Rails-Projekt mit dem Namen foo_bar_project.
1) Rufen Sie die Docker-Compose-Umgebungskonfiguration ab und entfernen Sie das Git-Repository. Wenn Sie alles in einem Git-Quellcode-Repository nachverfolgen möchten, können Sie später Ihr eigenes erstellen.
Die nächsten Schritte sollten im Verzeichnis ./environment ausgeführt werden. Stellen Sie also sicher, dass Sie die Befehle dort ausführen:
2) Jetzt müssen Sie dieser Umgebungskonfiguration einen Projektnamen zuweisen. Standardmäßig lautet er test_project. Für unseren hier beschriebenen Code müssen wir ihn wie zuvor erläutert in foo_bar_project ändern. Nehmen Sie dazu die Änderungen in der Datei ./environment/.env.example vor und passen Sie den Wert der Variablen PROJECT_NAME an. Verwenden Sie für Variablenwerte unbedingt Snake Case in Kleinbuchstaben:
3) Als Nächstes können Sie Ihr Projekt mit dem folgenden Befehl erstellen:
Wie Sie sehen, gibt es jetzt einen neuen Ordner namens application, der Ruby-on-Rails-Code enthält.
4) Jetzt müssen Sie Ihre lokale Entwicklungsumgebung mit Docker Compose erstellen. Dieser Schritt ist nach jeder Änderung an der Dockerfile oder Gemfile Ihrer Anwendung erforderlich.
5) Damit können Sie nun die lokale Ruby-Entwicklungsumgebung wie folgt starten:
Beachten Sie, dass dadurch noch keine Ruby-on-Rails-Anwendung gestartet wird. Dazu müssen wir eine Shell in der Docker-Umgebung öffnen und sie anweisen, den Prozess rails zu starten. So geht's:
Ruby on Rails mit Docker für die lokale Entwicklungsumgebung. Wenn Sie schließlich Ihren Browser öffnen und diese URL aufrufen: http://foo_bar_project.localhost/, sollten Sie das gerade erstellte Ruby-on-Rails-Projekt sehen.
Was steht uns jetzt also zur Verfügung?
Wir haben ein Projekt mit einem Umgebungsverzeichnis, das alles enthält, was wir zum Ausführen des Projekts benötigen, und einem Anwendungsverzeichnis mit unserem Anwendungscode. Dieses Verzeichnis ist in den Docker-Container eingebunden, sodass Sie über das Ruby-Docker-Image uneingeschränkten Zugriff darauf haben.
Wir können schnell auf die Ruby-Shell zugreifen und müssen daher keine Ruby-Umgebung wie Rails, Rake, Bundler oder eine andere Ruby-Toolchain lokal installieren.
Befehle können nach dem Befehl
make shellausgeführt werden.Diese Docker-Compose-Konfiguration des Projekts umfasst zwei vorkonfigurierte Stages. Wenn Sie Ihre Ruby-Anwendung also einmal bereitstellen möchten, können Sie eine eigene Stage erstellen. So einfach ist das!
Wenn Sie wissen möchten, wie die oben beschriebene Docker-Umgebung für Ruby on Rails funktioniert, sehen wir uns die einzelnen Komponenten an: das Ruby-Docker-Image, die Makefile und die Docker-Compose-Definition, die alles zusammenbringt.
Ein Ruby-Docker-Image
Zunächst ist das Ruby-Docker-Image ein wesentlicher Bestandteil. Es ist wichtig, es richtig zu erstellen, damit der Cache der Docker-Image-Layer effektiv wiederverwendet werden kann und auch andere Anforderungen einer lokalen Entwicklungsumgebung erfüllt werden.
Hier sehen Sie die Dockerfile für das Ruby-Docker-Image:
Wie Sie sehen, werden einige Annahmen zu den zusätzlich erforderlichen Konfigurationen getroffen, damit eine funktionsfähige Ruby-on-Rails-Anwendungsumgebung bereitsteht. Dazu gehören:
die Datei
database.yml, die mit den Verbindungsdetails für die Ruby-on-Rails-Datenbank befüllt wirddevelopment.rbfür die Ruby-on-Rails-Laufzeitkonfiguration der Entwicklungsumgebung
Dazu wird das Skript runners.sh im Verzeichnis ./environment/containers/ruby/initializers verwendet:
Diese Dockerfile nutzt außerdem Docker-Multistage-Builds, sodass bestimmte Teile bei Bedarf effektiv in verschiedenen Umgebungen wiederverwendet werden können, wenn Sie dieselbe Konfiguration für unterschiedliche Workflows wie Tests oder Staging einsetzen möchten.
Eine Rails-Docker-Compose-Konfiguration
Die Docker-Compose-Datei unter `./environment/docker-compose.development.yml` verbindet alle Dienste zu einer funktionsfähigen Ruby-on-Rails-Anwendung in Docker:
Ein nginx-HTTP-Server
Eine Ruby-Anwendung
Ein PostgreSQL-Datenbankserver
Hier sehen Sie die von dieser Konfiguration verwendete Rails-Docker-Compose-Datei:
Makefile für Docker
Um Entwicklerinnen und Entwicklern schließlich eine leicht zugängliche Schnittstelle für die Interaktion mit dieser lokalen Ruby-Entwicklungsumgebung bereitzustellen, wird ein Makefile verwendet:
Ruby-Anwendungen effizient ausführen
Hoffentlich haben Sie nun eine neue Fähigkeit erworben: Ruby-Anwendungen wie Ruby on Rails mithilfe einer Docker-Containerkonfiguration in Ihrer lokalen Umgebung auszuführen. Eine weitere Möglichkeit, Ruby-Anwendungen lokal auszuführen, sind Ruby-Virtual-Environments. Diese haben wir bereits in unserem Beitrag zur Installation von Ruby unter macOS behandelt.
Nachdem Sie Ihre Ruby-Entwicklungsumgebung eingerichtet haben, möchten Sie vielleicht auch erfahren, wie Sie Ihre Ruby-Anwendungen schützen. Weitere Informationen zur Ruby-Sicherheit finden Sie in den folgenden Artikeln:
Container-Sicherheit mit Fokus auf Entwickler
Snyk findet und behebt automatisch Schwachstellen in Container-Images und Kubernetes-Workloads.



