Docker - Anweisungscommands

Hallo zusammen, zukünftige Docker-Zauberer! Ich freue mich sehr, Ihr Guide auf dieser aufregenden Reise durch die Welt der Docker Commands zu sein. Als jemand, der seit Jahren Informatik unterrichtet, kann ich Ihnen sagen, dass Docker wie eine magische Zauberstab für Entwickler ist. Es macht unser Leben so viel einfacher! Also, lasst uns die Ärmel hochkrempeln und in die faszinierende Welt der Docker-Anweisungscommands eintauchen.

Docker - Commands

CMD-Anweisung

Die CMD-Anweisung ist wie die Hauptfigur in einem Film - sie ist der Star des Programms, wenn es um Docker-Container geht. Sie tells Docker, welchen Befehl auszuführen, wenn Ihr Container startet.

Grundlegende Syntax

CMD ["ausführbares", "param1", "param2"]

Lassen Sie uns das mit einem einfachen Beispiel erläutern:

FROM ubuntu
CMD ["echo", "Hallo, Docker-Welt!"]

In diesem Fall wird, wenn Sie Ihren Container ausführen, "Hallo, Docker-Welt!" in die Konsole geschrieben. Es ist, als würde Ihr Container "Hallo" sagen, sobald er aufwacht!

Mehrere CMD-Anweisungen

Hier ist ein kleiner kniffliger Frage: Was passiert, wenn Sie mehrere CMD-Anweisungen in Ihrer Dockerdatei haben?

FROM ubuntu
CMD ["echo", "Erster Befehl"]
CMD ["echo", "Zweiter Befehl"]

Wenn Sie vermuten, dass beide Befehle ausgeführt werden, befürchte ich, dass Sie in eine häufige Falle getappt sind! Tatsächlich wird nur die letzte CMD-Anweisung ausgeführt. Es ist, als wäre nur der letzte Akt im Theaterstück wichtig!

Shell-Form vs. Exec-Form

CMD kann in zwei Formen geschrieben werden:

  1. Shell-Form: CMD Befehl param1 param2
  2. Exec-Form: CMD ["ausführbares", "param1", "param2"]

Die Exec-Form wird bevorzugt, weil sie eindeutiger ist und Probleme mit der Shell-Verarbeitung vermeidet.

ENTRYPOINT

Wenn CMD die Hauptfigur ist, dann ist das ENTRYPOINT der Regisseur unseres Docker-Films. Es setzt den Hauptbefehl für den Container, der bei containerstart nicht überschrieben werden kann.

Grundlegende Syntax

ENTRYPOINT ["ausführbares", "param1", "param2"]

Sehen wir uns ein Beispiel an:

FROM ubuntu
ENTRYPOINT ["echo", "Hallo von"]
CMD ["Docker"]

Wenn Sie diesen Container ausführen, wird er "Hallo von Docker" ausgeben. Aber hier wird es interessant! Wenn Sie den Container mit zusätzlichen Argumenten ausführen, werden diese die CMD, aber nicht das ENTRYPOINT ersetzen.

docker run meinimage Welt

Dies wird "Hallo von Welt" ausgeben. Es ist, als ob das ENTRYPOINT die Bühne bereitet und die CMD (oder Laufzeitargumente) die Schauspieler sind, die darauf auftreten!

ENV

ENV ist wie die Garderobenabteilung unserer Docker-Produktion. Es setzt Umgebungsvariablen, die im gesamten Container verwendet werden können.

Grundlegende Syntax

ENV schlüssel=wert

Hier ist ein praktisches Beispiel:

FROM ubuntu
ENV MEIN_NAME="Docker-Enthusiast"
CMD ["sh", "-c", "echo Hallo, $MEIN_NAME!"]

Dies wird "Hallo, Docker-Enthusiast!" ausgeben, wenn der Container läuft. Es ist, als würde Ihr Container eine Namensschild tragen!

Mehrere ENV-Anweisungen

Im Gegensatz zu CMD können Sie mehrere ENV-Anweisungen haben, und sie alle treten in Kraft:

FROM ubuntu
ENV MEIN_NAME="Docker-Enthusiast"
ENV MEIN_HUND=Rex MEINE_KATZE=Fluffy
CMD ["sh", "-c", "echo Hallo, $MEIN_NAME! Deine Tiere sind $MEIN_HUND und $MEINE_KATZE."]

Dieser Container wird Sie grüßen und Ihre Tiere vorstellen!

WORKDIR

WORKDIR ist wie der Szenenbildner für unsere Docker-Produktion. Es setzt das Arbeitsverzeichnis für alle nachfolgenden Befehle in der Dockerdatei.

Grundlegende Syntax

WORKDIR /pfad/zum/verzeichnis

Sehen wir es in Aktion:

FROM ubuntu
WORKDIR /app
COPY . .
CMD ["ls", "-l"]

Diese Dockerdatei setzt das Arbeitsverzeichnis auf /app, kopiert den Inhalt des aktuellen Verzeichnisses hinein und listet die Inhalte auf, wenn der Container läuft. Es ist, als würde Ihr Container sagen: "Hey, mach dich zu Hause in diesem Verzeichnis!"

Mehrfache WORKDIR-Anweisungen

Sie können WORKDIR mehrmals verwenden, um Verzeichnisse zu wechseln:

FROM ubuntu
WORKDIR /app
WORKDIR src
WORKDIR scripts
RUN pwd

Dies wird /app/src/scripts ausgeben. Es ist, als ob Sie Ihrem Container eine Führung durch sein neues Zuhause geben!

Alles zusammenfügen

Jetzt, da wir alle unsere Docker-Anweisungscommands kennengelernt haben, sehen wir, wie sie in einer realen Welt-Szenario zusammenarbeiten. Stellen wir uns vor, wir erstellen eine einfache Python-Webanwendung:

FROM python:3.9-slim

# Setze Umgebungsvariablen
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# Setze Arbeitsverzeichnis
WORKDIR /app

# Installiere Abhängigkeiten
COPY requirements.txt .
RUN pip install -r requirements.txt

# Kopiere Projekt
COPY . .

# Befehl zum Ausführen der Anwendung
ENTRYPOINT ["python"]
CMD ["app.py"]

Diese Dockerdatei richtet eine Python-Umgebung ein, installiert Abhängigkeiten, kopiert unseren Anwendungscode und gibt an, wie die App ausgeführt wird. Es ist wie ein Rezept für die perfekte Umgebung für unsere Python-App!

Befehlssummary

Hier ist eine kurze Referenztabelle der Commands, die wir behandelt haben:

Befehl Beschreibung Beispiel
CMD Gibt an, welcher Befehl beim Start des Containers ausgeführt wird CMD ["python", "app.py"]
ENTRYPOINT Setzt den Hauptbefehl des Containers ENTRYPOINT ["python"]
ENV Setzt Umgebungsvariablen ENV MEIN_VAR=value
WORKDIR Setzt das Arbeitsverzeichnis WORKDIR /app

Denken Sie daran, diese Commands sind wie die Bausteine Ihres Docker-Containers. Kombinieren und kombinieren Sie sie, um die perfekte Umgebung für Ihre Anwendung zu erstellen!

Und dort haben Sie es, meine lieben Schüler! Wir haben die Welt der Docker-Anweisungscommands bereist, von der prominenten CMD bis zum dirigierenden ENTRYPOINT, der kostümbildenden ENV und dem szenenbildenden WORKDIR. Ich hoffe, dieser Leitfaden hat Ihren Weg in Ihren Docker-Abenteuern erleuchtet. Denken Sie daran, Übung macht den Meister, also fürchten Sie sich nicht, mit diesen Commands zu experimentieren. Viel Spaß beim Dockern!

Credits: Image by storyset