Middleman im Docker-Container

Für Fragen, Ideen oder Probleme rund um Technik wie z.B. Handy, Computer und Internet
Benutzeravatar
nobodyfrm
advanced-boy
advanced-boy
Beiträge: 238
Registriert: 12 Jan 2014, 17:26

Middleman im Docker-Container

Beitragvon nobodyfrm » 09 Mai 2016, 20:27

Hi,

da ich grade dabei bin, mich in die Software, die für die BP-Webseite eingesetzt wird, einzuarbeiten, würde ich mich gerne mit euch über Herangehensweisen, Herausforderungen und Komplikationen unterhalten.

Als Erstes ist da Middleman, ein auf Ruby basierender Webseiten-Generator für statische Webseiten, was ich mir zum Einarbeiten installieren wollte.

Um mir mein Host-System nicht voll zu müllen oder zu zerschießen, lass ich das ganze in einer vituellen Maschine laufen. Zuerst hatte ich mir ein Ubuntu genommen, dort dann versucht, direkt Middleman zu installieren. Das ist daran gescheitert, dass ein Abhängiges Ruby-Paket (Rack) eine neuere Ruby-Version haben wollte, als die von Ubuntu bereitgestellt wurde. Da nach mehreren Versuchen, es irgendwie manuell zuinstallieren, es immer noch nicht laufen wollte, wurde mir von nem Kumpel empfohlen, es doch mal mit Manjaro-Linux zu probieren. Dort werden die Pakete wesentlich schneller aktualisiert.

Nun ging alles recht fix: aktuelles Ruby (2.3.1) installiert, User angelegt, Middleman installiert und schon funtze es. (als ich jetzt grade nochmal geschaut habe, wo genau mein Problem bei Ubuntu war, stellte ich fest, dass ich nicht nicht die aktuellste Ubuntu-Version erwischt hatte. Mit der neusten Version trat die Fehlermeldung nicht mehr auf und ich konnte Middleman nativ ohne Schwierigkeiten installieren)

Um den Problemen mit der Verfügbarkeit von Paketen und Inkompatibilität aus dem Weg zu gehen, wurde mir von timtom empfohlen, als nächsten Schritt mir Docker anzugucken. Das ist ähnlich, wie man von virtuellen Maschinen kennt, nur dass da keine Hardware virtualisiert wird, sondern das ganze auf Anwendungsebene stattfindet in Containern und die Hardware des Host-Rechners verwendet wird.

In einen Docker-Container kann man ein Image installieren, welches auf einem Basis-Image besteht und und dann mit weiteren Informationen und Daten ausgestattet werden kann. Zum Erstellen eines Images gibt es eine Art Kochrezept, wo diese Angaben drin stehen, was alles in welcher Reihenfolge da hinein soll - die Dockerfile. Damit man nicht immer selbst das Image erstellen muss, gibt es Register (zb. Docker Hub) bei denen man fertige Images speichern kann, um sie für sich und andere User für eine spätere Verwendung bereit zu stellen.

Beim Starten eines Docker-Containers mit dem Befehl "docker run" gibt es eine Reihe von Parametern, die man angeben kann, um den Port anzugeben, über den man auf den Container zugreifen möchte, oder auch wenn man auf bestimmte Dateien/Verzeichnisse zugreifen möchte über Volumes... die meisten Angaben kann man auch schon bei dem Erstellen des Images in der Dockerfile angeben aber sie beim starten noch einmal beeinflussen.

Nach ein paar Tests mit Docker, habe ich mich daran gemacht, Middleman in ein Container zu packen. Dazu habe ich mir nochmal angeschaut, welche Schritte ich alles beim Installieren brauchte und hab diese in eine Dockerfile geschrieben. Nach ein paar Tippfehlern und Versuchen hat das auch wunderbar funktioniert. Dabei habe ich einfach die bereits erstellte Gemfile genutzt.

Meinen derzeitigen Stand der Dockerfile, samt aller anderen benötigen Dateien, um es laufen zu lassen sind auf Github: https://github.com/nobodyfrm/middleman-docker

Ich bin gespannt, welcher Schritt als nächstes kommt...

Middleman im Docker-Container

Werbung
 

Benutzeravatar
timtom
boypoint-Technik
Beiträge: 14062
Registriert: 13 Mär 2001, 00:00
Wohnort: Münster, Germany

Re: Middleman im Docker-Container

Beitragvon timtom » 09 Mai 2016, 21:35

Middleman kann ja sowohl nen 'server' modus als auch nen 'build'. Waere ja cool wenn das beides auch mit Docker ginge.
The greatest enemy of freedom is a happy slave.

Benutzeravatar
nobodyfrm
advanced-boy
advanced-boy
Beiträge: 238
Registriert: 12 Jan 2014, 17:26

Re: Middleman im Docker-Container

Beitragvon nobodyfrm » 09 Mai 2016, 23:29

im ersten Moment habe ich deinen Satz so verstanden, dass es schwierig sei, Middleman sowohl als Server, als auch nen build gleichzeitig in einem Docker zu erstellen. Das geht aber ohne Probleme... irgendwie auch logisch - so sollte es ja auch sein, am Ende soll statische Dateien rauskommen

Das ist bei Docker anders, da ist am Ende der laufende Container, begonnen mit der statischen Dockerfile, welche man durch ein build zu einem Image überführt. Dieses widerum kann man als Server starten.

Bin mir grade unsicher, ob du das damit meintest?

Benutzeravatar
timtom
boypoint-Technik
Beiträge: 14062
Registriert: 13 Mär 2001, 00:00
Wohnort: Münster, Germany

Re: Middleman im Docker-Container

Beitragvon timtom » 10 Mai 2016, 08:32

Ich meinte eher dass middleman zwei Betriebsarten hat: Einmal den Server, womit man zur Entwicklungszeit live sehen kann, wie die generierte Seite nachher aussieht. Da läuft Middleman quasi als Webserver, und das unterstützt Dein Docker Image für Middleman jetzt auch.
Aber man möchte ja auch die statische Webseite generieren können...

Vielleicht machste noch nen Readme dazu wie man das ganze aufruft für jeweils den middleman server und das Erzeugen der statischen Seite.
The greatest enemy of freedom is a happy slave.

Benutzeravatar
nobodyfrm
advanced-boy
advanced-boy
Beiträge: 238
Registriert: 12 Jan 2014, 17:26

Re: Middleman im Docker-Container

Beitragvon nobodyfrm » 11 Mai 2016, 22:20

Jetzt hat das Github-Repo auch eine README.md, in der mögliche Verwendung/Aufrufe stehen.

U.a. auch, wie ich mir das mit den zwei Betriebsarten gedacht habe.

Benutzeravatar
timtom
boypoint-Technik
Beiträge: 14062
Registriert: 13 Mär 2001, 00:00
Wohnort: Münster, Germany

Re: Middleman im Docker-Container

Beitragvon timtom » 14 Mai 2016, 11:01

Ich hab mir das mal angesehen, das macht ja schon einen ganz guten Eindruck :)
Mein Verstaendnis von Docker/Container Technologie ist dabei allerdings so, dass man sich nicht 'in den Container' rein verbindet. Das ist halt nicht wie eine virtuelle Maschine in anders, sondern dient dazu Prozesse zu isolieren.
D.h. man wuerde da - ausser zum experimentieren - keine interaktive Shell aufmachen. Damit man jetzt zwischen den Betriebsarten umschalten kann, schlag ich sowas vor

Code: Alles auswählen

ENTRYPOINT ["bundle", "exec", "middleman"]
CMD ["server"]

Dann hat man im default den server, kann aber per build auch den anderen Middleman Modus triggern.

Zum Volume: Auch wenn man da nicht so reinschaut, unterhalb des Root Verzeichnisses wuerde man nichts mounten. Dafuer kann man besser /home, /var oder /opt nehmen, je nachdem was man sich da ueberlegt.
The greatest enemy of freedom is a happy slave.

Re: Middleman im Docker-Container

Werbung
 

Zurück zu „Technik“



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast