|
|
| (Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) |
| Zeile 1: |
Zeile 1: |
| #WEITERLEITUNG [[Docker/Image/Erstellung]] | | #WEITERLEITUNG [[Docker/Image]] |
| | |
| == Images selbst definieren ==
| |
| FROM debian:stable-slim
| |
|
| |
| ARG USERNAME=pandoc
| |
| ARG USER_UID=1000
| |
| ARG USER_GID=1000
| |
|
| |
| RUN apt-get update && apt-get install -y --no-install-recommends \
| |
| apt-utils bash wget make graphviz biber \
| |
| texlive-base texlive-plain-generic texlive-latex-base \
| |
| #
| |
| && groupadd --gid $USER_GID $USERNAME \
| |
| && useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \
| |
| #
| |
| && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/*
| |
|
| |
| WORKDIR /pandoc
| |
| USER $USERNAME
| |
| | |
| docker build -t <NAME> -f <DOCKERFILE> .
| |
| | |
| <code>FROM</code> gibt die Basis an, d. h. hier ein Image von Debian in der Variante <code>stable-slim</code>, d. h. das ist der Basis-Layer für das zu bauende Docker-Image
| |
| | |
| Über <code>ARG</code> werden hier Variablen gesetzt
| |
| | |
| <code>RUN</code> ist der Befehl, der im Image (hier Debian) ausgeführt wird und einen neuen Layer hinzufügt
| |
| * In diesen Layer werden alle Dateien eingefügt, die bei der Ausführung des Befehls erzeugt oder angelegt werden
| |
| * Hier im Beispiel wird das Debian-Tool <code>apt-get</code> gestartet und weitere Debian-Pakete installiert
| |
| | |
| Da jeder <code>RUN</code>-Befehl einen neuen Layer anlegt, werden die restlichen Konfigurationen ebenfalls in diesem Lauf durchgeführt
| |
| * Insbesondere wird ein nicht-Root-User angelegt, der von der UID und GID dem Default-User in Linux entspricht
| |
| * Die gemounteten Dateien haben die selben Rechte wie auf dem Host, und durch die Übereinstimmung von UID/GID sind die Dateien problemlos zugreifbar und man muss nicht mit dem Root-User arbeiten (dies wird aus offensichtlichen Gründen als Anti-Pattern angesehen)
| |
| * Bevor der <code>RUN</code>-Lauf abgeschlossen wird, werden alle temporären und später nicht benötigten Dateien von <code>apt-get</code> entfernt, damit diese nicht Bestandteil des Layers werden
| |
| | |
| Mit <code>WORKDIR</code> und <code>USER</code> wird das Arbeitsverzeichnis gesetzt und auf den angegebenen User umgeschaltet
| |
| * Damit muss der User nicht mehr beim Aufruf von außen gesetzt werden
| |
| | |
| Über <code>docker build -t <NAME> -f <DOCKERFILE> .</code> wird aus dem angegebenen Dockerfile und dem Inhalt des aktuellen Ordners ("<code>.</code>") ein neues Image erzeugt und mit dem angegebenen Namen benannt
| |
| | |
| ; Hinweis zum Umgang mit Containern und Updates
| |
| Bei der Erstellung eines Images sind bestimmte Softwareversionen Teil des Images geworden
| |
| * Man kann prinzipiell in einem Container die Software aktualisieren, aber dies geht in dem Moment wieder verloren, wo der Container beendet und gelöscht wird
| |
| * Außerdem widerspricht dies dem Gedanken, dass mehrere Personen mit dem selben Image/Container arbeiten und damit auch die selben Versionsstände haben
| |
| * In der Praxis löscht man deshalb das alte Image einfach und erstellt ein neues, welches dann die aktualisierte Software enthält
| |
| | |
| [[Kategorie:Docker]]
| |