Zum Inhalt springen

Docker/Images selbst definieren: Unterschied zwischen den Versionen

Aus Foxwiki
Die Seite wurde neu angelegt: „== Images selbst definieren == <code>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 &&…“
 
Weiterleitungsziel von Docker/Image/Erstellung nach Docker/Image geändert
Markierung: Weiterleitungsziel geändert
 
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
== Images selbst definieren ==
#WEITERLEITUNG [[Docker/Image]]
<code>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</code>
<code>docker build -t <NAME> -f <DOCKERFILE> .</code>
 
<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

Aktuelle Version vom 15. Dezember 2025, 13:10 Uhr

Weiterleitung nach: