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.
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:
- Shell-Form:
CMD Befehl param1 param2
- 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