<commit_before># Hilfe zum aktuellen Verzeichnis

In diesem Verzeichnis befinden sich mehrere Templates zum Anlegen von Docker Images.
Das "example"-Image ist ein grundsätzliches Funktionsbeispiel für eine Umgebung mit PHP/Apache
und sollte nicht verändert werden.

# Hinweise zur Verzeichnisstruktur / Dateien
* Makefile
  * Problem: Docker kann nur Verzeichnisse unterhalb des Dockerfile-Verzeichnisses einbinden. symlinks funktionieren nicht, hardlinks auf Verzeichnisse sind unter Linux nicht möglich.
  * Workaround: Im Makefile werden die benötigten Verzeichnisse temporär ins aktuelle Verzeichnis kopiert und nach dem Docker build Vorgang wieder gelöscht.
* Dockerfile
  * Von Docker benötigte Datei für den Buildvorgang
  * Es wird eine Variante eines Betriebssystems mit möglichst wenig installierten Paketen verwendet (z.B. Ubuntu)
  * Alle benötigten module müssen von Hand im Dockerfile nachinstalliert werden (z.B. apache2, php7.0, ...)


# Nützliche Befehle im Umgang mit Docker

## Image erstellen (Beispiel: "example")
Ins Verzeichnis mit Dockerfile wechseln, z.B. docker/example

Makefile verwenden falls vorhanden (Grund siehe weiter oben / Makefile).
Falls es nicht existiert, kann zum Erstellen und lokalen Registrieren folgender Befehl verwendet werden:

`docker build --no-cache -t example .`

Lässt man --no-cache weg, legt sich Docker einen Cache für alles an was er beim Buildvorgang herunterlädt. Das gilt nicht nur für das Ubuntu-Image und apt-Pakete, sondern auch für Dinge wie ub_tools usw. => Wenn man also Änderungen am Code vornimmt und diese Testen möchte (mehrere Builds hintereinander), sollte man immer unbedingt --no-cache verwenden, da die Änderungen sonst nicht im Image ankommen!

## Images anzeigen lassen
`docker images`

## Image in einem Container ausführen
`docker run -e ZOTERO_TRANSLATION_SERVER_URL="http://ub28.uni-tuebingen.de:1969/web" -p 8080:80 -d example`
* -e => wird verwendet um beim Start des Containers spezielle Umgebungsvariablen zu setzen
* -p 8080:80 => Port 80 des Containers wird auf Port 8080 auf dem Host gemappt
* -d => detach, wird im Hintergrund ausgeführt

Ein Container beendet sich von selbst, sobald kein Prozess (z.B. Apache httpd) mehr im Vordergrund läuft.
Um dies zu vermeiden kann man beim Starten zusätzlich den Parameter -t angeben.

## Laufende Docker-Prozesse (=Container) anzeigen<commit_msg>Fixed a hostname.<commit_after># Hilfe zum aktuellen Verzeichnis

In diesem Verzeichnis befinden sich mehrere Templates zum Anlegen von Docker Images.
Das "example"-Image ist ein grundsätzliches Funktionsbeispiel für eine Umgebung mit PHP/Apache
und sollte nicht verändert werden.

# Hinweise zur Verzeichnisstruktur / Dateien
* Makefile
  * Problem: Docker kann nur Verzeichnisse unterhalb des Dockerfile-Verzeichnisses einbinden. symlinks funktionieren nicht, hardlinks auf Verzeichnisse sind unter Linux nicht möglich.
  * Workaround: Im Makefile werden die benötigten Verzeichnisse temporär ins aktuelle Verzeichnis kopiert und nach dem Docker build Vorgang wieder gelöscht.
* Dockerfile
  * Von Docker benötigte Datei für den Buildvorgang
  * Es wird eine Variante eines Betriebssystems mit möglichst wenig installierten Paketen verwendet (z.B. Ubuntu)
  * Alle benötigten module müssen von Hand im Dockerfile nachinstalliert werden (z.B. apache2, php7.0, ...)


# Nützliche Befehle im Umgang mit Docker

## Image erstellen (Beispiel: "example")
Ins Verzeichnis mit Dockerfile wechseln, z.B. docker/example

Makefile verwenden falls vorhanden (Grund siehe weiter oben / Makefile).
Falls es nicht existiert, kann zum Erstellen und lokalen Registrieren folgender Befehl verwendet werden:

`docker build --no-cache -t example .`

Lässt man --no-cache weg, legt sich Docker einen Cache für alles an was er beim Buildvorgang herunterlädt. Das gilt nicht nur für das Ubuntu-Image und apt-Pakete, sondern auch für Dinge wie ub_tools usw. => Wenn man also Änderungen am Code vornimmt und diese Testen möchte (mehrere Builds hintereinander), sollte man immer unbedingt --no-cache verwenden, da die Änderungen sonst nicht im Image ankommen!

## Images anzeigen lassen
`docker images`

## Image in einem Container ausführen
`docker run -e ZOTERO_TRANSLATION_SERVER_URL="http://mb028.ub.uni-tuebingen.de:1969/web" -p 8080:80 -d example`
* -e => wird verwendet um beim Start des Containers spezielle Umgebungsvariablen zu setzen
* -p 8080:80 => Port 80 des Containers wird auf Port 8080 auf dem Host gemappt
* -d => detach, wird im Hintergrund ausgeführt

Ein Container beendet sich von selbst, sobald kein Prozess (z.B. Apache httpd) mehr im Vordergrund läuft.
Um dies zu vermeiden kann man beim Starten zusätzlich den Parameter -t angeben.

## Laufende Docker-Prozesse (=Container) anzeigen
{'fraction_non_alphanumeric': 0.05714285714285714, 'fraction_numerical': 0.011554621848739496, 'mean_word_length': 4.88504326328801, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1305304', 'n_tokens_mistral': 1571, 'n_tokens_neox': 1557, 'n_words': 605}