Dockerfile

Dockerfile-Docker Image-Docker Container

Die Verwendung von Docker Images ist ein wichtiger Schritt in Richtung Docker, aber es gibt noch weitere nützliche Funktionen. Eine davon ist das Dockerfile, das es ermöglicht, das Image auf einfache Weise Schritt für Schritt zu erstellen. Es beschreibt, wie die Umgebung aufgebaut werden soll, ähnlich wie in anderen Umgebungen wie Vagrant.

Das Dockerfile ist eine einfache Textdatei, die den Aufbau des Docker Images beschreibt und als Schritt-für-Schritt-Anleitung fungiert, um das Image immer wieder auf dieselbe Art zu erstellen. Mit einem Dockerfile kann das Image leicht erstellt und Teamkollegen zur Verfügung gestellt werden, damit sie dasselbe Image erzeugen können.

Image aus dem Dockerfile erzeugen

Um ein fertiges Image aus einem Dockerfile zu erzeugen, müssen wir folgenden Befehl ausführen:

docker build

Dieser Befehl benötigt einen Kontext als Parameter, der das Verzeichnis enthält, in dem sich das Dockerfile befindet. Standardmäßig sucht Docker im Kontextverzeichnis nach der Datei. Wenn ein anderer Speicherort angeben werden soll, kann der Parameter -f verwendet werden.

Wenn ein Image aus dem Dockerfile erstellt werden soll, wird auf der Konsole in das Verzeichnis gewechselt, das das Dockerfile enthält, und geben den folgenden Befehl ein:

docker build -t tekkie/ninja-php-server

Durch die Verwendung des Parameters -t kann dem Image, das aus dem Dockerfile erstellt wird, einen Namen zuweisen, der später verwendet werden kann. Der Punkt am Ende steht für das aktuelle Verzeichnis und gibt an, dass das Kontextverzeichnis für das Erstellen des Images verwendet werden soll.

Aufbau eines Dockerfiles

Das Dockerfile ist einfach aufgebaut und besteht aus einer einzelnen Befehlszeile pro Zeile. Die Befehle werden durch die Konvention BEFEHL parameter getrennt, wobei der Befehl großgeschrieben wird. Kommentare können mit einem # am Anfang einer Zeile hinzugefügt werden.

Beim Bauen des Dockerfiles wird jeder Befehl in jeder Zeile nacheinander ausgeführt, um ein Zwischenimage zu erzeugen. Dieses Zwischenimage dient dann als Basis für den nächsten Befehl. Wenn ein Befehl erfolgreich ausgeführt wird, bleibt das Image erhalten. Das bedeutet, dass Docker beim nächsten Aufruf des build-Befehls an der gleichen Stelle weitermachen kann, solange sich im Dockerfile nichts ändert. Dies ist besonders nützlich, wenn aufwendige Befehle wie die Installation mehrerer Anwendungen ausgeführt werden müssen, da viel Zeit gespart werden kann.

Befehl FROM

Der entscheidende Befehl im Dockerfile lautet FROM und steht am Anfang. Er definiert klar, welches Image als Basis für das neue Image dienen soll. Dabei kann es sich um ein Basisimage wie ubuntu oder ubuntu:trusty handeln, oder um von Nutzern oder uns selbst erstellte Images wie tekkie/ninja-test-server.

Befehl MAINTAINER

Mit dem MAINTAINER Befehl kann der Autor des Images gesetzt werden.

MAINTAINER Tekkie Ninja <tekkieninja.blog@gmail.com>

Befehl RUN

Einer der wichtigsten Befehle im Dockerfile ist der Befehl RUN. Mit diesem können wir den Parameter als Shell Befehl ausführen und damit quasi alles in unserer virtuellen Maschine tun. Der Befehl

RUN sudo apt-get install -y apache2

wird intern wie folgt übersetzt:

/bin/sh -c sudo apt-get install -y apache2

Eine weitere Möglichkeit, den RUN Befehl auszuführen, ist die sogenannte exec Syntax:

RUN [„executable“, „param1“, „param2“]

In den meisten Fällen werden die Dockerfiles eine Verkettung von vielen RUN Befehlen beinhalten. Hier ist es wichtig zu beachten, dass jeder RUN Befehl einen neuen Layer im Image erzeugt und damit Speicher verbraucht. Daher sollten wir die Anzahl der RUN Befehle möglichst gering halten und mehrere Dinge innerhalb eines Befehls erledigen.

Negativ Beispiel:

RUN sudo apt-get install -y apache2

RUN sudo apt-get install -y php8.2

RUN sudo apt-get install -y nodejs

RUN sudo apt-get install -y npm

Empfohlene Variante:

RUN sudo apt-get install -y apache2 php8.2 nodejs npm

Befehl CMD

Der Befehl CMD definiert den Standardbefehl, der in einem Container ausgeführt wird, wenn er aus unserem Image erzeugt wird. Es ist jedoch möglich, dass der Container diesen Befehl überschreibt. Ein Docker Image kann nur einen CMD Befehl haben. Wenn mehrere definiert sind, wird nur der letzte Befehl als gültig angesehen. Die Syntax von CMD ist identisch mit der Syntax von RUN.

Beispiel:

CMD echo "Hello world from Tekkie Ninja"

Befehl ADD / COPY

ADD und COPY sind zwei ähnliche Befehle, wobei ADD etwas mehr Funktionen hat als COPY. Nachfolgend wird nicht näher auf die Unterschiede der beiden Funtkionen eingegangen.

Beide Befehle ermöglichen es, eine Datei oder ein Verzeichnis vom Host-System in das Dateisystem des Images zu kopieren. Die Syntax ist einfach:

ADD directory /var/www/html/directory

Hier wird zuerst das Verzeichnis oder die Datei angegeben, die kopiert werden soll, und dann das Ziel. Die Syntax für den COPY-Befehl ist identisch. Beide Befehle haben auch eine alternative Syntax, die verwendet werden muss, wenn der Dateiname Leerzeichen enthält:

COPY ["directory", "/var/www/html/directory"]

Dank dieser Befehle können wir Konfigurationsdateien (z.B. die Apache2-Konfiguration oder eine php.ini) in unser neues Image kopieren.

Befehl WORKDIR

Jeder Befehl RUN, CMD, ADD und COPY bezieht sich standardmäßig auf das Root-Verzeichnis. Wenn dies geändert werden soll, kann dies mit dem Befehl WORKDIR erfolgen. Dieser setzt das neue Referenzverzeichnis für alle nachfolgenden Befehle fest oder bis zum nächsten Aufruf von WORKDIR.

Zum Beispiel:

WORKDIR /var/www

Es kann auch ein relativer Pfad angeben werden, der sich am letzten Aufruf von WORKDIR orientiert:

WORKDIR vhosts/tekkieninja.de

Nach den beiden oben genannten Befehlen wäre der neue Referenzpfad also var/www/vhosts/tekkieninja.de.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen