Verwendung des docker compose create Befehls zum Erstellen von Containern

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie den Befehl docker compose create effektiv nutzen können, um Container basierend auf einer docker-compose.yml-Datei zu erstellen. Wir beginnen mit der Vorbereitung einer einfachen docker-compose.yml-Datei, einschließlich der notwendigen Schritte zur Installation von Docker Compose in der LabEx-Umgebung.

Nach dem Setup werden Sie die grundlegende Verwendung von docker compose create erkunden und dann in die verschiedenen Optionen eintauchen. Dazu gehört das Erzwingen der Neuerstellung von Containern mit --force-recreate, das Erstellen von Containern ohne Neubuild von Images mittels --no-build sowie das Sicherstellen, dass die neuesten Images mit --pull always heruntergeladen werden. Am Ende dieses Labs werden Sie ein solides Verständnis dafür haben, wie Sie docker compose create für die Verwaltung Ihrer Multi-Container-Anwendungen nutzen können.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555076{{"Verwendung des docker compose create Befehls zum Erstellen von Containern"}} docker/ps -.-> lab-555076{{"Verwendung des docker compose create Befehls zum Erstellen von Containern"}} docker/rm -.-> lab-555076{{"Verwendung des docker compose create Befehls zum Erstellen von Containern"}} docker/create -.-> lab-555076{{"Verwendung des docker compose create Befehls zum Erstellen von Containern"}} docker/pull -.-> lab-555076{{"Verwendung des docker compose create Befehls zum Erstellen von Containern"}} end

Vorbereitung einer einfachen docker-compose.yml-Datei

In diesem Schritt bereiten wir eine einfache docker-compose.yml-Datei vor. Bevor wir beginnen, installieren wir Docker Compose. Da die LabEx VM-Umgebung Docker Compose nicht vorinstalliert hat, müssen wir es manuell installieren. Wir laden die Docker Compose-Binary herunter und machen sie ausführbar.

Zuerst laden wir die Docker Compose-Binary mit curl herunter. Wir verwenden Version 1.29.2, die mit der installierten Docker-Version kompatibel ist.

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Dieser Befehl lädt die Docker Compose-Binary von der offiziellen GitHub-Releases-Seite herunter und speichert sie unter /usr/local/bin/docker-compose. Die Teile $(uname -s) und $(uname -m) erkennen automatisch Ihr Betriebssystem und die Architektur, um sicherzustellen, dass die korrekte Binary heruntergeladen wird.

Als nächstes müssen wir die heruntergeladene Binary ausführbar machen.

sudo chmod +x /usr/local/bin/docker-compose

Dieser Befehl fügt Ausführungsberechtigungen zur docker-compose-Datei hinzu, sodass Sie sie als Befehl ausführen können.

Nun überprüfen wir, ob Docker Compose korrekt installiert ist, indem wir die Version überprüfen.

docker-compose --version

Sie sollten eine Ausgabe ähnlich zu docker-compose version 1.29.2, build 5becea4c sehen. Dies bestätigt, dass Docker Compose installiert und einsatzbereit ist.

Jetzt erstellen wir eine einfache docker-compose.yml-Datei in Ihrem ~/project-Verzeichnis. Diese Datei definiert einen einzelnen Service mit dem nginx-Image.

nano ~/project/docker-compose.yml

Dieser Befehl öffnet den nano-Texteditor, um die docker-compose.yml-Datei zu erstellen und zu bearbeiten. Fügen Sie folgenden Inhalt in den Editor ein:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

Lassen Sie uns diese docker-compose.yml-Datei aufschlüsseln:

  • version: '3.8' gibt die Docker Compose-Dateiformatversion an.
  • services: definiert die Services (Container), die Sie ausführen möchten.
  • web: ist der Name unseres Services. Sie können jeden beliebigen Namen wählen.
  • image: nginx:latest spezifiziert das Docker-Image für diesen Service. Hier verwenden wir die neueste Version des offiziellen Nginx-Images.
  • ports: mappt Ports zwischen dem Host und dem Container. "80:80" mappt Port 80 auf dem Host zu Port 80 im Container. Das bedeutet, Sie können auf den im Container laufenden Nginx-Webserver zugreifen, indem Sie http://localhost in Ihrem Webbrowser aufrufen (oder die IP-Adresse der VM).

Speichern Sie die Datei mit Strg + O, drücken Sie Enter und verlassen Sie den Editor mit Strg + X.

Sie haben nun erfolgreich eine einfache docker-compose.yml-Datei erstellt, die einen Web-Service mit dem Nginx-Image definiert. In den nächsten Schritten werden wir diese Datei verwenden, um Container zu erstellen und zu verwalten.

Container mit docker-compose create erstellen

In diesem Schritt verwenden wir den Befehl docker-compose create, um Container basierend auf der im vorherigen Schritt vorbereiteten docker-compose.yml-Datei zu erstellen. Der Befehl docker-compose create erstellt die Container, startet sie jedoch nicht. Dies ist nützlich, wenn Sie die Container-Umgebung einrichten möchten, ohne die Services sofort auszuführen.

Bevor wir den Container erstellen, stellen wir sicher, dass das nginx-Image lokal verfügbar ist. Falls nicht, wird Docker Compose es automatisch während des Erstellungsprozesses herunterladen. Es ist jedoch eine gute Praxis, sich der verwendeten Images bewusst zu sein. Sie können das Image manuell mit dem docker pull-Befehl herunterladen:

docker pull nginx:latest

Dieser Befehl lädt das nginx:latest-Image von Docker Hub auf Ihren lokalen Rechner herunter. Sie sollten eine Ausgabe sehen, die den Download-Fortschritt und den Abschluss anzeigt.

Navigieren Sie nun in das Verzeichnis, das Ihre docker-compose.yml-Datei enthält. In unserem Fall ist dies das ~/project-Verzeichnis.

cd ~/project

Führen Sie nun den docker-compose create-Befehl aus:

docker-compose create

Dieser Befehl liest die docker-compose.yml-Datei im aktuellen Verzeichnis und erstellt die darin definierten Container. Sie sollten eine Ausgabe sehen, die anzeigt, dass der Container für den web-Service erstellt wird.

Nach Abschluss des Befehls können Sie den Status der erstellten Container mit dem docker ps -a-Befehl überprüfen.

docker ps -a

Die Ausgabe von docker ps -a zeigt alle Container an, einschließlich derjenigen, die nicht ausgeführt werden. Sie sollten einen Container namens project_web_1 sehen (der Name basiert auf dem Verzeichnisnamen und dem Servicenamen) mit dem Status Created. Dies bestätigt, dass der Container erfolgreich erstellt wurde, aber noch nicht gestartet ist.

Der docker-compose create-Befehl ist nützlich für die Vorbereitung Ihrer Container. In den nächsten Schritten werden wir untersuchen, wie diese Container gestartet und verwaltet werden können.

Container mit --force-recreate zwangsweise neu erstellen

In diesem Schritt lernen wir, wie man Container mit dem Befehl docker-compose create --force-recreate zwangsweise neu erstellt. Das Flag --force-recreate wird verwendet, um Container neu zu erstellen, selbst wenn ihre Konfiguration unverändert ist. Dies ist nützlich in Szenarien, in denen Sie die Container-Instanz aktualisieren müssen, beispielsweise nach Änderungen am zugrundeliegenden Image, die Docker Compose möglicherweise nicht automatisch erkennt.

Stellen Sie zunächst sicher, dass Sie sich im Verzeichnis ~/project befinden, wo sich Ihre docker-compose.yml-Datei befindet.

cd ~/project

Führen Sie nun den docker-compose create-Befehl mit dem --force-recreate-Flag aus:

docker-compose create --force-recreate

Da wir den Container bereits im vorherigen Schritt erstellt haben, wird Docker Compose den vorhandenen Container erkennen. Aufgrund des --force-recreate-Flags wird der bestehende Container entfernt und ein neuer mit derselben Konfiguration erstellt. Sie sollten eine Ausgabe sehen, die anzeigt, dass der vorhandene Container entfernt und ein neuer erstellt wird.

Überprüfen wir den Status der Container erneut mit docker ps -a.

docker ps -a

Sie sollten weiterhin einen Container namens project_web_1 mit dem Status Created sehen. Obwohl Name und Konfiguration gleich sind, handelt es sich um eine neue Container-Instanz, die aufgrund des --force-recreate-Flags erstellt wurde.

Das --force-recreate-Flag ist eine leistungsstarke Option, wenn Sie sicherstellen möchten, dass eine frische Instanz Ihres Containers erstellt wird, unabhängig davon, ob sich die Konfiguration in der docker-compose.yml-Datei geändert hat.

Container ohne Build-Vorgang mit --no-build erstellen

In diesem Schritt untersuchen wir die Option docker-compose create --no-build. Dieses Flag ist nützlich, wenn Ihre docker-compose.yml-Datei Services enthält, die aus einem Dockerfile erstellt werden (mittels build-Anweisung), Sie jedoch nur die Container erstellen möchten, ohne die Images neu zu bauen. Da unsere aktuelle docker-compose.yml-Datei nur ein vorgefertigtes Image (nginx:latest) verwendet, hat das --no-build-Flag in diesem speziellen Fall keine sichtbare Auswirkung auf den Build-Prozess. Dennoch ist es wichtig, dessen Zweck für zukünftige Anwendungen mit Services zu verstehen, die einen Build-Vorgang erfordern.

Stellen Sie zunächst sicher, dass Sie sich im Verzeichnis ~/project befinden.

cd ~/project

Führen wir nun den docker-compose create-Befehl mit dem --no-build-Flag aus. Da der Container project_web_1 aus den vorherigen Schritten bereits existiert, verwenden wir zusätzlich das --force-recreate-Flag, um sicherzustellen, dass ein neuer Container erstellt wird.

docker-compose create --no-build --force-recreate

In einem Szenario, in dem Ihre docker-compose.yml einen Service mit einer build-Anweisung definiert hätte, würde dieser Befehl den Container mit einem vorhandenen Image (falls verfügbar) erstellen oder das Image herunterladen, jedoch den in der Dockerfile definierten Build-Prozess überspringen. In unserem aktuellen Fall, da wir ein vorgefertigtes Image verwenden, ähnelt die Ausgabe dem vorherigen Schritt und zeigt die Entfernung des alten Containers und die Erstellung eines neuen an.

Überprüfen wir den Container-Status erneut.

docker ps -a

Sie sollten weiterhin den Container project_web_1 im Status Created sehen. Das --no-build-Flag betrifft hauptsächlich Services, die aus einer Dockerfile gebaut werden, und verhindert den Build-Prozess während der Container-Erstellung.

Container erstellen und Images mit --pull always herunterladen

In diesem Schritt verwenden wir den Befehl docker-compose create --pull always. Das Flag --pull always weist Docker Compose an, stets die neueste Version des Images vor der Container-Erstellung herunterzuladen, selbst wenn bereits eine lokale Kopie des Images existiert. Dies ist nützlich, um sicherzustellen, dass Sie stets das aktuellste Image für Ihre Services verwenden.

Stellen Sie zunächst sicher, dass Sie sich im Verzeichnis ~/project befinden.

cd ~/project

Führen Sie nun den docker-compose create-Befehl mit dem --pull always-Flag aus. Da der Container project_web_1 bereits existiert, verwenden wir zusätzlich das --force-recreate-Flag, um einen neuen Container basierend auf dem möglicherweise aktualisierten Image zu erstellen.

docker-compose create --pull always --force-recreate

Bei Ausführung dieses Befehls überprüft Docker Compose zunächst auf Updates für das nginx:latest-Image auf Docker Hub. Falls eine neuere Version verfügbar ist, wird diese heruntergeladen. Anschließend wird der bestehende project_web_1-Container entfernt und ein neuer mit dem heruntergeladenen Image erstellt. Die Ausgabe zeigt den Pull-Prozess (falls ein neues Image verfügbar ist), gefolgt von der Entfernung und Neuerstellung des Containers.

Überprüfen wir den Container-Status ein letztes Mal.

docker ps -a

Sie werden weiterhin den project_web_1-Container im Status Created sehen. Der entscheidende Unterschied besteht darin, dass Docker Compose aktiv nach einem neueren Image gesucht und dieses gegebenenfalls heruntergeladen hat, bevor diese Container-Instanz erstellt wurde.

Das --pull always-Flag ist wichtig, um Ihre Service-Bereitstellungen mit den neuesten Image-Versionen aktuell zu halten und sicherzustellen, dass Sie von den aktuellsten Funktionen, Fehlerbehebungen und Sicherheitsupdates profitieren.

Zusammenfassung

In diesem Lab haben wir gelernt, wie der Befehl docker compose create verwendet wird, um Container basierend auf einer docker-compose.yml-Datei zu erstellen. Wir begannen mit der Vorbereitung einer einfachen docker-compose.yml-Datei, die einen Nginx-Service definiert. Dazu mussten wir Docker Compose in der LabEx-Umgebung manuell installieren, indem wir die Binärdatei herunterluden und ausführbar machten. Anschließend überprüften wir die Installation.

Nach den Vorbereitungen untersuchten wir verschiedene Optionen des docker compose create-Befehls. Wir lernten, wie man Container mit dem Basisbefehl erstellt, wie bestehende Container mit dem --force-recreate-Flag zwangsweise neu erstellt werden, wie Container ohne Neubuild der Images mittels des --no-build-Flags erstellt werden und wie mit dem --pull always-Flag sichergestellt wird, dass vor der Erstellung die neuesten Images heruntergeladen werden. Diese Schritte demonstrierten die Flexibilität und Kontrolle, die docker compose create bei der Verwaltung von Container-Lebenszyklen bietet.