ist jetzt verfügbar! Lesen Sie über die neuen Funktionen und Fehlerbehebungen vom November.

Docker oder Kubernetes aus einem Container verwenden

Während Sie Ihre Anwendung in einem Entwicklungscontainer erstellen, bereitstellen und debuggen können, müssen Sie sie möglicherweise auch testen, indem Sie sie in einer Produktionsumgebung ausführen, die aus Containern besteht. Glücklicherweise können Sie durch die Installation der benötigten Docker- oder Kubernetes-CLIs und das Mounten Ihres lokalen Docker-Sockets Ihre Container-Images der App aus dem Entwicklungscontainer heraus erstellen und bereitstellen.

Sobald die benötigten CLIs vorhanden sind, können Sie auch mit dem entsprechenden Container-Cluster über die Container Tools-Erweiterung oder die Kubernetes-Erweiterung arbeiten.

Weitere Informationen zu einem bestimmten Szenario finden Sie in den folgenden Beispiel-Entwicklungscontainer-Vorlagen. Um sie zu Ihrem Projekt hinzuzufügen, **öffnen Sie den Ordner**, mit dem Sie arbeiten möchten, in VS Code und führen Sie den Befehl **Dev Containers: Add Dev Container Configuration Files...** in der Befehlspalette (F1) aus.

Sie werden aufgefordert, eine vordefinierte Container-Konfiguration aus unserem Index von First-Party- und Community-Vorlagen in einer filterbaren Liste auszuwählen, die basierend auf dem Inhalt Ihres Ordners sortiert ist. Über die VS Code-Benutzeroberfläche können Sie eine der in den folgenden Abschnitten beschriebenen Vorlagen auswählen.

Docker oder Minikube in einem Entwicklungsc Container ausführen

  • Docker-in-Docker – Veranschaulicht, wie Docker (oder Moby) vollständig innerhalb eines Containers ausgeführt wird. Bietet Unterstützung für das Bind-Mounten aller Ordner innerhalb des Entwicklung Containers, kann jedoch den Cache Ihres lokalen Rechners nicht wiederverwenden.

  • Kubernetes – Minikube-in-Docker – Veranschaulicht, wie Minikube vollständig innerhalb eines Containers mit ähnlichen Vorteilen und Einschränkungen wie Docker-in-Docker ausgeführt wird.

Zugriff auf eine vorhandene Docker- oder Minikube-Instanz von einem Container aus

  • Docker außerhalb von Docker – Veranschaulicht, wie Sie die Docker- (oder Moby-) CLI in Ihrem Entwicklungscontainer verwenden können, um eine Verbindung zum Docker-Daemon Ihres Hosts herzustellen, indem Sie den Docker-Unix-Socket binden. Geringerer Overhead und Wiederverwendung des Caches Ihres Rechners, hat jedoch Einschränkungen beim Bind-Mounten.

  • Docker außerhalb von Docker Compose – Variante von Docker außerhalb von Docker für Situationen, in denen Sie Docker Compose anstelle eines einzelnen Dockerfiles verwenden.

  • Kubernetes – Lokale Konfiguration – Nimmt das Docker außerhalb von Docker-Modell und fügt kubectl und Helm hinzu, um zu veranschaulichen, wie Sie auf einen lokalen Minikube- oder Docker-basierten Kubernetes-Cluster zugreifen können.

Es gibt auch Dokumentation zu den Docker-in-Docker, Docker outside of Docker und Kubernetes-Installationsskripten, die Sie wiederverwenden können und die in den obigen Beispielen referenziert werden.

Host-Volumes mit Docker von einem Container aus mounten

Beim Befolgen des Docker-in-Docker-Modells bewirkt die Verwendung der Docker-CLI innerhalb eines Entwicklungscontainers, dass dieser mit einem Docker-Daemon an derselben Stelle interagiert. Das bedeutet, dass Sie alles, was sich im Entwicklungscontainer befindet, in die von Ihnen erstellten "inneren" Container "binden" können.

Zum Beispiel wird dies "einfach funktionieren"

docker run -v /workspace/examplefile.txt:/incontainer/path debian

Wenn Sie jedoch einen Host-Ordner in den inneren Container binden möchten, müssen Sie ihn zuerst in Ihren Entwicklungscontainer mounten.

Bei Docker outside of Docker ist die Art des standardmäßig funktionierenden Bind-Mountens umgekehrt. Hier interagiert die Docker-CLI im Container stattdessen mit dem Docker-Daemon des Hosts. Dies wirkt sich auf das Mounten von Verzeichnissen aus dem Container aus, da der Pfad innerhalb des Containers möglicherweise nicht mit dem Pfad des Verzeichnisses auf dem Host übereinstimmt.

Dasselbe Beispiel oben schlägt fehl, da der Pfad auf dem Host außerhalb des Containers nicht /workspace/... ist. Außerdem können einige Ordner einfach nicht gemountet werden, da sie nur im Container existieren. Wenn Sie dies tun müssen, passt das Docker-in-Docker-Modell möglicherweise besser zu Ihren Anforderungen.

Wenn Sie einen Ordner in einem Container öffnen, können Sie das Host-Verzeichnis als Umgebungsvariable an den Container übergeben, um das Workspace-Ordner-Mounten zu ermöglichen. (Dies funktioniert jedoch nicht, wenn Sie ein Volume verwendet haben – Docker-in-Docker ist dort die beste Wahl.) Fügen Sie dazu Folgendes zu devcontainer.json hinzu

  "remoteEnv": {
    // Pass in the host directory for Docker mount commands from inside the container
    "HOST_PROJECT_PATH": "${localWorkspaceFolder}"
  }

Das folgende Beispiel stammt aus einer makefile und mountet die KUBECONFIG-Datei vom Entwicklungsc Container in den neuen Docker-Container, den es startet.

docker run -p 8089:8089 -p 9090:9090 -v $(shell echo ${KUBECONFIG} | sed s#/workspace#${HOST_PROJECT_PATH}#):/kubeconfig.json -e KUBECONFIG=/kubeconfig.json ${IMG} -f behaviours/run_submit_locust.py
© . This site is unofficial and not affiliated with Microsoft.