Dockerfile: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| (8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 6: | Zeile 6: | ||
*Jede Zeile im Dockerfile stellt eine Anweisung dar. | *Jede Zeile im Dockerfile stellt eine Anweisung dar. | ||
*Anweisungen beginnen in der Regel mit einem Schlüsselwort gefolgt von Argumenten. | *Anweisungen beginnen in der Regel mit einem Schlüsselwort gefolgt von Argumenten. | ||
| − | *Kommentare können mit einem | + | *Kommentare können mit einem "#" eingeleitet werden. |
| + | |||
=Wichtige Dockerfile-Anweisungen= | =Wichtige Dockerfile-Anweisungen= | ||
{| class="wikitable" | {| class="wikitable" | ||
| Zeile 32: | Zeile 33: | ||
|- | |- | ||
| ADD | | ADD | ||
| − | | Ähnlich wie | + | | Ähnlich wie "COPY", kann jedoch auch remote-Dateien hinzufügen oder Archive automatisch entpacken. |
|- | |- | ||
| EXPOSE | | EXPOSE | ||
| Zeile 49: | Zeile 50: | ||
=Best Practices für Dockerfiles= | =Best Practices für Dockerfiles= | ||
*Verwenden eines minimalen Basis-Images | *Verwenden eines minimalen Basis-Images | ||
| − | **Verwenden eines Images wie | + | **Verwenden eines Images wie "alpine" oder "ubuntu-slim", um die Größe des endgültigen Images zu reduzieren. |
*Ordnen von mehrzeilige Argumente, um die Lesbarkeit zu verbessern und die Größe des Docker-Images zu reduzieren. | *Ordnen von mehrzeilige Argumente, um die Lesbarkeit zu verbessern und die Größe des Docker-Images zu reduzieren. | ||
| − | *Verwenden von | + | *Verwenden von "COPY" statt "ADD", es sei denn, wir benötigen spezielle Funktionen von "ADD". |
| − | *Führen Sie mehrere | + | *Führen Sie mehrere "RUN"-Anweisungen in einer Zeile zusammen, um die Größe des Images zu minimieren. |
*Verwenden von Umgebungsvariablen für konfigurierbare Werte, um die Wiederverwendung des Images zu fördern. | *Verwenden von Umgebungsvariablen für konfigurierbare Werte, um die Wiederverwendung des Images zu fördern. | ||
*Bereinigen von temporäre Dateien und Cache nach der Installation von Paketen. | *Bereinigen von temporäre Dateien und Cache nach der Installation von Paketen. | ||
| − | *Verwenden von | + | *Verwenden von ".dockerignore", um unnötige Dateien aus dem Build-Kontext auszuschließen. |
*Starten von Anwendungen im Container als Nicht-Root-Benutzer. | *Starten von Anwendungen im Container als Nicht-Root-Benutzer. | ||
| − | = | + | ==Beispiel Ubuntu mit Apache Server== |
| − | *Erstellen | + | <syntaxhighlight lang=docker> |
| − | + | # Wir verwenden ein offizielles Ubuntu slim Image als Basis-Image | |
| + | FROM ubuntu:20.04-slim | ||
| + | |||
| + | # Aktualisieren des Systems / Installation des Apache-Webserver und Bereinigung der enstandenen Cache Dateien | ||
| + | RUN apt-get update && \ | ||
| + | apt-get install -y apache2 && \ | ||
| + | apt-get clean && \ | ||
| + | rm -rf /var/lib/apt/lists/* | ||
| + | |||
| + | # Erstellen einer einfachen "Hello World"-HTML-Datei | ||
| + | RUN echo '<!DOCTYPE html><html><head><title>Hello World</title></head><body><h1>Hello World</h1></body></html>' > /var/www/html/index.html | ||
| + | |||
| + | # Exposen des Ports 80 | ||
| + | EXPOSE 80 | ||
| + | |||
| + | # Automatischer start des Apache-Webserver, wenn der Container gestartet wird | ||
| + | CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"] | ||
| + | </syntaxhighlight> | ||
Aktuelle Version vom 12. Mai 2023, 09:34 Uhr
Was ist eine Dockerfile?
- Eine Dockerfile ist eine Textdatei, die Anweisungen zur Erstellung eines Docker-Images enthält.
- Es ermöglicht eine automatisierte, reproduzierbare und versionierbare Erstellung von Docker-Images.
Grundlegende Struktur eines Dockerfiles
- Jede Zeile im Dockerfile stellt eine Anweisung dar.
- Anweisungen beginnen in der Regel mit einem Schlüsselwort gefolgt von Argumenten.
- Kommentare können mit einem "#" eingeleitet werden.
Wichtige Dockerfile-Anweisungen
| Schlüsselwort | Erklärung |
|---|---|
| FROM | Definiert das Basis-Image, von dem das neue Image erstellt wird. |
| RUN | Führt einen Shell-Befehl innerhalb des Images aus. |
| CMD | Gibt den Standardbefehl an, der beim Starten des Containers ausgeführt wird. |
| ENTRYPOINT | Legt den Einstiegspunkt für den Container fest; wird üblicherweise für ausführbare Anwendungen verwendet. |
| WORKDIR | Legt das Arbeitsverzeichnis für nachfolgende Anweisungen fest. |
| COPY | Kopiert Dateien oder Verzeichnisse vom lokalen System in das Image. |
| ADD | Ähnlich wie "COPY", kann jedoch auch remote-Dateien hinzufügen oder Archive automatisch entpacken. |
| EXPOSE | Informiert Docker, dass der Container auf einem bestimmten Netzwerk-Port lauscht. |
| ENV | Setzt Umgebungsvariablen für das Image. |
| VOLUME | Erstellt einen Speicherbereich für Daten, die von einem Container verwendet werden. |
| USER | Setzt den Benutzer für nachfolgende Anweisungen und für den laufenden Container. |
Best Practices für Dockerfiles
- Verwenden eines minimalen Basis-Images
- Verwenden eines Images wie "alpine" oder "ubuntu-slim", um die Größe des endgültigen Images zu reduzieren.
- Ordnen von mehrzeilige Argumente, um die Lesbarkeit zu verbessern und die Größe des Docker-Images zu reduzieren.
- Verwenden von "COPY" statt "ADD", es sei denn, wir benötigen spezielle Funktionen von "ADD".
- Führen Sie mehrere "RUN"-Anweisungen in einer Zeile zusammen, um die Größe des Images zu minimieren.
- Verwenden von Umgebungsvariablen für konfigurierbare Werte, um die Wiederverwendung des Images zu fördern.
- Bereinigen von temporäre Dateien und Cache nach der Installation von Paketen.
- Verwenden von ".dockerignore", um unnötige Dateien aus dem Build-Kontext auszuschließen.
- Starten von Anwendungen im Container als Nicht-Root-Benutzer.
Beispiel Ubuntu mit Apache Server
# Wir verwenden ein offizielles Ubuntu slim Image als Basis-Image
FROM ubuntu:20.04-slim
# Aktualisieren des Systems / Installation des Apache-Webserver und Bereinigung der enstandenen Cache Dateien
RUN apt-get update && \
apt-get install -y apache2 && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Erstellen einer einfachen "Hello World"-HTML-Datei
RUN echo '<!DOCTYPE html><html><head><title>Hello World</title></head><body><h1>Hello World</h1></body></html>' > /var/www/html/index.html
# Exposen des Ports 80
EXPOSE 80
# Automatischer start des Apache-Webserver, wenn der Container gestartet wird
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]