Beispiele

Ein paar Beispiele aus Öggl/Kofler…

Beispiel 1

Beispielhaftes erstes Dockerfile:

Dockerfile nach Öggl/Kofler (S. 63)
1# Datei Dockerfile
2FROM ubuntu:18.04
3LABEL maintainer "kontakt@kofler.info"
4RUN apt -get update && \
5    apt-get install -y joe && \
6    apt-get clean && \
7    rm -rf /var/lib/apt/lists/*
8CMD ["/bin/bash"]

Im Seminar analysieren - Wert legen auf Zusammenfassung für RUN mit && Konstruktion!

Beispiel 2

Beispiel für einfachen Webserver:

Gefahr

Für aktuellere Docker und Ubuntu Kombi fehlerhafte Umsetzung!

Dockerfile für Webserver nach Öggl/Kofler (ALTE AUFLAGE!)
 1# Datei Dockerfile
 2FROM ubuntu:18.04
 3
 4LABEL maintainer "kontakt@kofler.info"
 5LABEL description "Test"
 6
 7# Apache installieren, und unnötige Dateien aus dem Paket - Cache
 8# gleich wieder entfernen
 9RUN apt-get update && \
10    apt-get install -y apache2 && \
11    apt-get -y clean && \
12    rm -rf /var/cache/apt /var/lib/apt/lists/*
13
14# HTTPS -Unterstützung aktivieren
15RUN a2ensite default-ssl && a2enmod ssl
16
17ENV APACHE_RUN_USER=www-data \
18    APACHE_RUN_GROUP=www-data \
19    APACHE_LOG_DIR=/var/log/apache2
20
21EXPOSE 80 443
22
23# gesamten Inhalt des Projektverzeichnisses
24# samplesite nach /var/www/html kopieren
25COPY samplesite/ /var/www/html
26
27CMD ["/usr/sbin/apache2ctl" , "-D" , "FOREGROUND"]

Aktualisiertes Beispiel:

Dockerfile für Webserver nach Öggl/Kofler (AKTUELLE Auflage!)
 1# Datei Dockerfile
 2FROM ubuntu:20.04
 3
 4LABEL maintainer "name@somehost.com"
 5LABEL description "Test"
 6
 7# Umgebungsvariablen und Zeitzone einstellen
 8# (erspart interaktive Rückfragen)
 9ENV TZ="Europe/Berlin" \
10    APACHE_RUN_USER=www-data \
11    APACHE_RUN_GROUP=www-data \
12    APACHE_LOG_DIR=/var/log/apache2
13
14# Apache installieren, unnötige Dateien aus dem Paket-Cache
15# gleich wieder entfernen, HTTPS aktivieren
16RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
17    echo $TZ > /etc/timezone && \
18    apt-get update && \
19    apt-get install -y apache2 && \
20    apt-get -y clean && \
21    rm -r /var/cache/apt /var/lib/apt/lists/* && \
22    a2ensite default-ssl && \
23    a2enmod ssl
24
25EXPOSE 80 443
26
27# gesamten Inhalt des Projektverzeichnisses
28# samplesite nach /var/www/html kopieren
29COPY samplesite/ /var/www/html
30
31CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

Beispiel 3

Alpine Linux mit Apache2

Hier sind wir durch Recherchen zu Alpine Linux und diversen Dockerfile Analysen herausgefordert worden (Anm.: Apache als Prozess am Laufen halten im Container!)

Dockerfile für Alpine Linux mit Apache2
 1FROM alpine
 2
 3LABEL maintainer "dummy@aol.com"
 4LABEL description "Test Alpine und Apache"
 5
 6
 7RUN apk update && apk upgrade && \
 8    apk add apache2 libxml2-dev apache2-utils && \
 9    rm -rf /var/cache/apk/*
10
11# war zwischendurch nötig: 
12# RUN mkdir /run/apache2
13
14ENV APACHE_RUN_USER=apache \
15    APACHE_RUN_GROUP=www-data 
16
17EXPOSE 80 443
18
19COPY samplesite/ /var/www/localhost/htdocs
20
21CMD ["/usr/sbin/httpd", "-DFOREGROUND"]

Beispiel 4

Als ausführlicheres Dockerfile-Beispiel liefern Öggl/Kofler für „Pandoc“:

Dockerfile pandoc Installationen nach Öggl/Kofler (S. 73ff.)
 1# Datei Dockerfile
 2FROM haskell
 3
 4# Pakete installieren
 5RUN apt-get update -y && \
 6    apt-get install -y -o Acquire::Retries=10 \
 7                     --no-install-recommends \
 8      texlive-latex-recommended \
 9      texlive-latex-extra \
10      texlive-fonts-recommended \
11      texlive-lang-german \
12      texlive-pstricks \
13      imagemagick \
14      unzip \
15      python3 \
16      ghostscript \
17      less && \
18    apt-get clean && \
19    rm -rf /var/lib/apt/lists/*
20
21# Pandoc installieren
22RUN cabal update && \
23    cabal install pandoc-2.1.1 && \
24    ln -s /root/.cabal/bin/pandoc /usr/bin/pandoc
25
26# Mitteleuropäische Zeitzone
27# (siehe https://serverfault.com/questions/683605)
28RUN cp /usr/share/zoneinfo/Europe/Berlin /etc/localtime
29
30# Fonts für LaTeX installieren
31# ADD rheinwerkfonts.tgz /usr/local/share/texmf
32# RUN texhash
33
34# Volume /data, bei docker run mit dem Arbeitsverzeichnis
35# verbinden, also: docker run -v $(pwd):/data
36WORKDIR /data
37VOLUME  ["/data"]
38
39ENTRYPOINT ["/bin/bash"]

Die Kollegen richten also - wie ich mit SphinxDoc - eine Umgebung ein, in der sie mit Hilfe von Markdown und dem Werkzeug pandoc dann HTML als auch LaTeX-Versionen für Print/PDF generieren können.

Auch hier gibt es eine aktualisierte Variante:

Dockerfile pandoc Installationen nach Öggl/Kofler (AKTUELLE Version)
 1# Datei Dockerfile
 2FROM ubuntu:20.04
 3ENV TZ="Europe/Berlin"
 4RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
 5    echo $TZ > /etc/timezone && \
 6    apt-get update -y && \
 7    apt-get install -y -o Acquire::Retries=10 \
 8                     --no-install-recommends \
 9      texlive-latex-recommended \
10      texlive-latex-extra \
11      texlive-fonts-recommended \
12      texlive-lang-german \
13      texlive-pstricks \
14      texlive-fonts-extra \
15      imagemagick \
16      unzip \
17      python3 \
18      ghostscript \
19      locales \
20      joe \
21      vim \
22      curl \
23      wget \
24      ca-certificates \
25      less && \
26    apt-get clean && \
27    rm -rf /var/lib/apt/lists/*
28
29# Pandoc installieren
30RUN curl -L https://github.com/jgm/pandoc/releases/download/2.14/pandoc-2.14-1-amd64.deb \
31   -o /tmp/pandoc.deb && \
32   dpkg -i /tmp/pandoc.deb && \
33   rm /tmp/pandoc.deb
34
35# Fonts installieren
36# (die Font-Datei dürfen wir nicht weitergeben)
37# ADD myfonts.tgz /usr/local/share/texmf
38# RUN texhash
39
40# Volume /data, bei docker run mit dem Arbeitsverzeichnis
41# verbinden, also: docker run -v $(pwd):/data
42# Fedora, RHEL:    docker run -v $(pwd):/data:z
43VOLUME  ["/data"]
44
45# Startkommando
46ENTRYPOINT ["/bin/bash"]