Dockerfile Beispiele

Ein paar Beispiele aus Literatur Öggl/Kofler und beliebig Quellen online…

PHP 8.2 + Apache + Debian

Einfaches Images mit PHP 8 und Apache2 Webserver basierend auf Basisimage mit dieser Kombination.

1FROM php:8.2-apache
2ENV TZ="Europe/Amsterdam"
3COPY index.php /var/www/html

Man erkennt die Festlegung einer Umgebungsvariablen und das Kopieren einer Datei in den Container. Man sollte wieder eine Recherche zum Image auf dem Docker Hub durchführen.

Image erstellen mit (z.B.): docker build -t joebseminar/myphpapache:1.0 .

Zu beachten ist hier wieder der Punkt am Ende für den Basisordner (Bedeutung: aktueller Ordner) des Build-Prozesses mit dem Dockerfile und der index.php.

Ubuntu 22.04 mit Package iproute2

Mit Basisimage Ubuntu (Tag: 22.04) ein Image mit Editor-Installation joe und Aufräumen der Apt-Technik.

Hier stellen wir auch eine Shell (hier: Bash) bereit, mit der wir später „-i / –interactive“ und „-t / –tty“ über ein Terminal kommunizieren können.

Dockerfile nach Öggl/Kofler (S. 63)
1FROM ubuntu:22.04
2LABEL maintainer "name@somehost.com";
3RUN apt-get update && \
4 apt-get install -y iproute2 && \
5 apt-get clean && \
6 rm -rf /var/lib/apt/lists/*
7CMD ["/bin/bash"]

Zu beachten ist hier, dass durch das einzeilige RUN-Command die Image-Größe und die Layer-Erzeugung (hier: 1 Layer für RUN) optimiert wird.

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
 6RUN apk update && apk upgrade && \
 7    apk add --no-cache apache2 libxml2-dev apache2-utils
 8# rm -rf /var/cache/apk/*
 9
10# war zwischendurch nötig:
11# RUN mkdir /run/apache2
12
13ENV APACHE_RUN_USER=apache \
14    APACHE_RUN_GROUP=www-data
15
16EXPOSE 80 443
17
18COPY samplesite/ /var/www/localhost/htdocs
19
20CMD ["/usr/sbin/httpd", "-DFOREGROUND"]

Haskell und Ubuntu mit Pandoc

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

Hinweis

Die Umsetzungen sind aufgrund fehlender Font-Einbindungen nicht komplett und funktionstüchtig.

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"]

Ubuntu + Apache2 + https + Projekt

Beispiel für einfachen Webserver: (s.a. Vorheriger Abschnitt)

Aktualisiertes Beispiel:

Dockerfile für Webserver nach Öggl/Kofler (AKTUELLE Auflage!)
 1# Datei Dockerfile
 2FROM ubuntu:22.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"]

Ich habe im folgenden mal eine alter Version belassen, um mögliche Probleme aufzuzeigen.

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"]