Beispiele¶
Ein paar Beispiele aus Öggl/Kofler…
Beispiel 1¶
Beispielhaftes erstes Dockerfile:
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!
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:
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!)
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“:
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:
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"]