Anknuepfend an meinen letzten Beitrag werde ich das Setup erweitern und anstatt Jekyll die statische Seite bereitstellen zu lassen, werde ich nginx das tun lassen. Diesmal wird Jekyll nur die statische Seite erstellen.
Ich mache das aehnlich wie James Turnbull in seinem Buch The Docker Book. Er erstellte ein Image zum Erstellen der statischen HTML-Seiten mit Jekyll und ein weiteres Image zum Bereitstellen mit Apache.
Ich habe gerade einen nuetzlichen Vergleich von Apache und Nginx gefunden: Apache vs Nginx: Practical Considerations.
Mein Grund fuer die Verwendung von nginx ist einfacher: Ich habe es schon benutzt, aber vieles vergessen. Da ich Apache in meiner taeglichen Arbeit verwende, diente die Arbeit mit nginx fuer diesen Beitrag als schoene Auffrischung.
Das gesamte Konstrukt der Verwendung von zwei Docker-Containern ist ein grundlegendes Beispiel dafuer, wie man eine Deployment-Pipeline mit Docker aufbaut: Lass einen oder mehrere Container Build-Artefakte erstellen und dann Container das Endprodukt liefern oder bereitstellen. Dazwischen gibt es sogenannte Docker-Volumes - mehr dazu am Ende dieses Beitrags.
Hier ist also das Dockerfile zum Erstellen der statischen Seite mit Jekyll:
{% gist 0be78ee97c9d05f7ccae Dockerfile %}
Erstelle es mit:
docker build --tag="twissmueller/jekyll-blog-to-nginx" --rm=true.
Ziehe das offizielle nginx-Image:
docker pull nginx
Wir haben zwei Optionen zum Starten der Container.
Option 1:
docker run -v /usr/share/nginx/html --name nginx -p 8080:80 nginx
docker run --rm --volumes-from nginx --name jekyll-blog-to-nginx twissmueller/jekyll-blog-to-nginx:latest
Option 2:
docker run --name jekyll-blog-to-nginx twissmueller/jekyll-blog-to-nginx:latest
docker run --volumes-from jekyll-blog-to-nginx --name nginx -p 80:80 nginx
Was passiert, ist dass der zweite Container die Daten vom ersten Container verwendet. Sogenannte Docker-Volumes werden verwendet, um die Daten auch ohne einen laufenden Container zugaenglich zu halten.
Soweit ich weiss, gibt es zwei Hauptansaetze zur Verwendung von Docker-Volumes. Die folgenden Artikel sollten dir helfen zu entscheiden, wie du Daten mit Docker persistieren kannst:
- How to deal with persistent storage (e.g. databases) in docker
- Why Docker Data Containers are Good
- Advanced Docker Volumes
Meine schnelle Schlussfolgerung nach dem Lesen? Wenn Portabilitaet deiner Daten erforderlich ist, entscheide dich fuer Volume-Container.
Fertig fuer heute!