Zum Inhalt springen

Docker/Images selbst definieren: Unterschied zwischen den Versionen

Aus Foxwiki
Weiterleitung nach Docker/Image/Erstellung erstellt
Der Seiteninhalt wurde durch einen anderen Text ersetzt: „#WEITERLEITUNG Docker/Image/Erstellung
Markierung: Ersetzt
Zeile 1: Zeile 1:
#WEITERLEITUNG [[Docker/Image/Erstellung]]
#WEITERLEITUNG [[Docker/Image/Erstellung]]
== 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.&nbsp;h.&nbsp;hier ein Image von Debian in der Variante <code>stable-slim</code>, d.&nbsp;h.&nbsp;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]]

Version vom 12. November 2025, 22:23 Uhr

Weiterleitung nach: