Docker/Images selbst definieren: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
| Zeile 1: | Zeile 1: | ||
== Images selbst definieren == | == Images selbst definieren == | ||
FROM debian:stable-slim | |||
ARG USERNAME=pandoc | ARG USERNAME=pandoc | ||
ARG USER_UID=1000 | ARG USER_UID=1000 | ||
ARG USER_GID=1000 | ARG USER_GID=1000 | ||
RUN apt-get update && apt-get install -y --no-install-recommends \ | RUN apt-get update && apt-get install -y --no-install-recommends \ | ||
apt-utils bash wget make graphviz biber \ | apt-utils bash wget make graphviz biber \ | ||
| Zeile 14: | Zeile 14: | ||
# | # | ||
&& apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* | && 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 | <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 | ||
| Zeile 37: | Zeile 38: | ||
Ü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 | Ü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 | * 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 | * 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 | * In der Praxis löscht man deshalb das alte Image einfach und erstellt ein neues, welches dann die aktualisierte Software enthält | ||
[[Kategorie:Docker]] | [[Kategorie:Docker]] | ||
Version vom 6. August 2025, 07:32 Uhr
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> .
FROM gibt die Basis an, d. h. hier ein Image von Debian in der Variante stable-slim, d. h. das ist der Basis-Layer für das zu bauende Docker-Image
Über ARG werden hier Variablen gesetzt
RUN 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
apt-getgestartet und weitere Debian-Pakete installiert
Da jeder RUN-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
RUN-Lauf abgeschlossen wird, werden alle temporären und später nicht benötigten Dateien vonapt-getentfernt, damit diese nicht Bestandteil des Layers werden
Mit WORKDIR und USER wird das Arbeitsverzeichnis gesetzt und auf den angegebenen User umgeschaltet
- Damit muss der User nicht mehr beim Aufruf von außen gesetzt werden
Über docker build -t <NAME> -f <DOCKERFILE> . wird aus dem angegebenen Dockerfile und dem Inhalt des aktuellen Ordners (".") 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