Entdecken Sie agentenbasierte Entwicklung –

Dev Container CLI

Dieses Thema behandelt die Befehlszeilenschnittstelle für Entwicklungs-Container (Dev Container CLI), mit der Sie Entwicklungs-Container erstellen und verwalten können. Sie dient als Begleitung zur Development Containers Specification.

Entwicklungs-Container

Eine konsistente, vorhersehbare Umgebung ist der Schlüssel zu einer produktiven und angenehmen Softwareentwicklung.

Container (zum Beispiel Docker-Container) wurden in der Vergangenheit zur Standardisierung von Anwendungen bei der Bereitstellung verwendet. Es gibt jedoch großartige Möglichkeiten, zusätzliche Szenarien zu unterstützen, darunter Continuous Integration (CI), Testautomatisierung und voll ausgestattete Entwicklungsumgebungen. Ein Entwicklungs-Container bietet diese Arbeitsumgebung und stellt sicher, dass Ihr Projekt über die benötigten Tools und Software verfügt, unabhängig davon, ob es komplex und verteilt ist oder nur wenige Anforderungen hat.

Diagram comparing dev versus production containers

Entwicklungs-Container werden in Visual Studio Code über die Erweiterung Dev Containers sowie in GitHub Codespaces unterstützt. Diese Unterstützung basiert auf devcontainer.json, einem strukturierten Metadatenformat (JSON with Comments, kurz jsonc) zur Konfiguration einer containerisierten Umgebung.

Da die Containerisierung von Produktions-Workloads zur Norm wird, sind Entwicklungs-Container für Szenarien jenseits von VS Code weithin nützlich geworden. Um Entwicklungs-Container in jeder Umgebung zu fördern, wurde mit der Arbeit an der Development Containers Specification begonnen, die es jedem ermöglicht, in jedem Tool eine konsistente Entwicklungsumgebung zu konfigurieren. Die Open-Source-Dev-Container-CLI dient als Referenzimplementierung dieser Spezifikation.

Die Dev Container CLI

Wenn Tools wie VS Code und Codespaces eine devcontainer.json-Datei in einem Benutzerprojekt erkennen, verwenden sie eine CLI, um einen Entwicklungs-Container zu konfigurieren. Die Dev-Container-CLI ist eine Referenzimplementierung, damit einzelne Benutzer und andere Tools devcontainer.json-Metadaten lesen und daraus Entwicklungs-Container erstellen können.

Diese CLI kann direkt verwendet oder in Produkterlebnisse integriert werden, ähnlich wie sie heute in Dev Containers und Codespaces integriert ist. Sie unterstützt derzeit sowohl eine einfache Single-Container-Option als auch die Integration mit Docker Compose für Multi-Container-Szenarien.

Die CLI ist im Repository devcontainers/cli verfügbar.

Installation

Sie können die CLI schnell über die Dev Containers-Erweiterung ausprobieren. Wählen Sie den Befehl Dev Containers: Install devcontainer CLI aus der Befehlspalette (F1).

Alternative Installation

Es gibt zusätzliche Optionen für die Verwendung der CLI an anderen Orten

  • Installieren des npm-Pakets
  • Verwendung der GitHub Action oder der Azure DevOps Task
  • Erstellen der CLI aus dem Quellcode

Auf dieser Seite konzentrieren wir uns auf die Verwendung des npm-Pakets.

npm install

Um das npm-Paket zu installieren, benötigen Sie Python, Node.js (Version 14 oder höher) und C/C++, um eine der Abhängigkeiten zu erstellen. Das VS Code Wiki How to Contribute enthält Details zu den empfohlenen Toolsets.

npm install -g @devcontainers/cli

Überprüfen Sie, ob Sie die CLI ausführen können und den Hilfetext sehen

devcontainer <command>

Commands:
  devcontainer up                   Create and run dev container
  devcontainer build [path]         Build a dev container image
  devcontainer run-user-commands    Run user commands
  devcontainer read-configuration   Read configuration
  devcontainer features             Features commands
  devcontainer templates            Templates commands
  devcontainer exec <cmd> [args..]  Execute a command on a running dev container

Options:
  --help     Show help                                                 [boolean]
  --version  Show version number                                       [boolean]

Hinweis: Der open-Befehl zum Öffnen Ihres Entwicklungs-Containers wird aufgelistet, wenn Sie die CLI über VS Code installiert haben.

Ausführen der CLI

Sobald Sie die CLI haben, können Sie sie mit einem Beispielprojekt ausprobieren, wie diesem Rust-Beispiel.

Klonen Sie das Rust-Beispiel auf Ihren Computer und starten Sie einen Entwicklungs-Container mit dem up-Befehl der CLI

git clone https://github.com/microsoft/vscode-remote-try-rust
devcontainer up --workspace-folder <path-to-vscode-remote-try-rust>

Dadurch wird das Container-Image aus einer Container-Registry heruntergeladen und der Container gestartet. Ihr Rust-Container sollte nun laufen

[88 ms] dev-containers-cli 0.1.0.
[165 ms] Start: Run: docker build -f /home/node/vscode-remote-try-rust/.devcontainer/Dockerfile -t vsc-vscode-remote-try-rust-89420ad7399ba74f55921e49cc3ecfd2 --build-arg VARIANT=bullseye /home/node/vscode-remote-try-rust/.devcontainer
[+] Building 0.5s (5/5) FINISHED
 => [internal] load build definition from Dockerfile                       0.0s
 => => transferring dockerfile: 38B                                        0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => [internal] load metadata for mcr.microsoft.com/vscode/devcontainers/r  0.4s
 => CACHED [1/1] FROM mcr.microsoft.com/vscode/devcontainers/rust:1-bulls  0.0s
 => exporting to image                                                     0.0s
 => => exporting layers                                                    0.0s
 => => writing image sha256:39873ccb81e6fb613975e11e37438eee1d49c963a436d  0.0s
 => => naming to docker.io/library/vsc-vscode-remote-try-rust-89420ad7399  0.0s
[1640 ms] Start: Run: docker run --sig-proxy=false -a STDOUT -a STDERR --mount type=bind,source=/home/node/vscode-remote-try-rust,target=/workspaces/vscode-remote-try-rust -l devcontainer.local_folder=/home/node/vscode-remote-try-rust --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --entrypoint /bin/sh vsc-vscode-remote-try-rust-89420ad7399ba74f55921e49cc3ecfd2-uid -c echo Container started
Container started
{"outcome":"success","containerId":"f0a055ff056c1c1bb99cc09930efbf3a0437c54d9b4644695aa23c1d57b4bd11","remoteUser":"vscode","remoteWorkspaceFolder":"/workspaces/vscode-remote-try-rust"}

Sie können dann Befehle in diesem Entwicklungs-Container ausführen

devcontainer exec --workspace-folder <path-to-vscode-remote-try-rust> cargo run

Dies kompiliert das Rust-Beispiel und führt es aus, mit der Ausgabe

[33 ms] dev-containers-cli 0.1.0.
   Compiling hello_remote_world v0.1.0 (/workspaces/vscode-remote-try-rust)
    Finished dev [unoptimized + debuginfo] target(s) in 1.06s
     Running `target/debug/hello_remote_world`
Hello, VS Code Dev Containers!
{"outcome":"success"}

Diese oben genannten Schritte sind auch in der README des CLI-Repositorys enthalten.

Automatisierung

Wenn Sie die Dev-Container-CLI in Ihren CI/CD-Builds oder der Testautomatisierung verwenden möchten, finden Sie Beispiele für GitHub Actions und Azure DevOps Tasks im Repository devcontainers/ci.

Vorab-Erstellung (Pre-building)

Der Befehl devcontainer build ermöglicht es Ihnen, schnell ein Entwicklungs-Container-Image zu erstellen, indem Sie dieselben Schritte wie die Dev Containers-Erweiterung oder GitHub Codespaces ausführen. Dies ist besonders nützlich, wenn Sie ein Entwicklungs-Container-Image vorab mit einem CI- oder DevOps-Produkt wie GitHub Actions erstellen möchten.

build akzeptiert einen Pfad zu dem Ordner, der einen .devcontainer-Ordner oder eine .devcontainer.json-Datei enthält. Zum Beispiel erstellt devcontainer build --workspace-folder <my_repo> das Container-Image für my_repo.

Beispiel für das Erstellen und Veröffentlichen eines Images

Sie möchten beispielsweise eine Reihe von Images vorab erstellen, die Sie dann in mehreren Projekten oder Repositories wiederverwenden. Führen Sie dazu diese Schritte aus

  1. Erstellen Sie ein Quellcode-Repository.

  2. Erstellen Sie eine Entwicklungs-Container-Konfiguration für jedes Image, das Sie vorab erstellen möchten, und passen Sie es nach Wunsch an (einschließlich dev container Features). Betrachten Sie zum Beispiel diese devcontainer.json-Datei

    {
      "build": {
        "dockerfile": "Dockerfile"
      },
      "features": {
        "ghcr.io/devcontainers/features/docker-in-docker:1": {
          "version": "latest"
        }
      }
    }
    
  3. Verwenden Sie den Befehl devcontainer build, um das Image zu erstellen und es in Ihre Image-Registry zu pushen. Informationen zur Benennung von Images und zusätzliche Schritte wie die Authentifizierung finden Sie in der Dokumentation Ihrer Image-Registry (wie Azure Container Registry, GitHub Container Registry oder Docker Hub).

    devcontainer build --workspace-folder <my_repo> --push true --image-name <my_image_name>:<optional_image_version>
    

Vermeidung von Problemen mit Docker-erstellten Images

Da Dockerfiles und Docker Compose-Dateien ohne VS Code oder die devcontainer-CLI verwendet werden können, möchten Sie Benutzer möglicherweise darauf hinweisen, dass sie nicht versuchen sollten, das Image direkt zu erstellen. Mehr dazu erfahren Sie in der erweiterten Dokumentation zu Entwicklungs-Containern.

Vorlagen (Templates) und Funktionen (Features)

Sie können mit Dev-Container-Vorlagen (Templates) und Funktionen (Features) mithilfe der Dev-Container-CLI arbeiten. Wenn Sie Vorlagen erstellen und verwenden, möchten Sie diese möglicherweise für andere veröffentlichen. Mehr dazu erfahren Sie in der Dev-Container-Spezifikation.

Feedback

Die Dev-Container-CLI und die Spezifikation befinden sich in aktiver Entwicklung. Wir freuen uns über Ihr Feedback, das Sie unter diesem Issue oder durch neue Issues und Pull Requests im Repository devcontainers/cli einreichen können.

Nächste Schritte

© . This website operates independently and is not affiliated with or endorsed by Microsoft. All brand names, logos, and trademarks are the property of their respective owners.