Zum Inhalt springen

Docker/Images selbst definieren: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
== Images selbst definieren ==
== Images selbst definieren ==
  <code>FROM debian:stable-slim
  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


  WORKDIR /pandoc
  docker build -t <NAME> -f <DOCKERFILE> .
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
<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
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
; 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-get gestartet 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 von apt-get entfernt, 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