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

Dev Container CLI

Dieses Thema behandelt die Kommandozeilenschnittstelle (CLI) für Entwicklungsccontainer (dev container CLI), die es Ihnen ermöglicht, Entwicklungsccontainer zu erstellen und zu verwalten. Sie ist eine Ergänzung zur Development Containers Specification.

Entwicklungscontainer

Eine konsistente, vorhersagbare Umgebung ist der Schlüssel zu einer produktiven und angenehmen Softwareentwicklungserfahrung.

Container (z. B. Docker-Container) wurden historisch zur Standardisierung von Anwendungen bei der Bereitstellung verwendet. Es besteht jedoch eine großartige Gelegenheit, zusätzliche Szenarien zu unterstützen, einschließlich Continuous Integration (CI), Testautomatisierung und vollwertigen Entwicklungsumgebungen. Ein Entwicklungsccontainer stellt diese Arbeitsumgebung bereit und stellt sicher, dass Ihr Projekt über die benötigten Werkzeuge und Software verfügt, unabhängig davon, ob es komplex und verteilt ist oder nur wenige Anforderungen hat.

Diagram comparing dev versus production containers

Entwicklungsccontainer werden in Visual Studio Code über die Erweiterung Dev Containers und in GitHub Codespaces unterstützt. Diese Unterstützung basiert auf devcontainer.json, einem strukturierten JSON-Format mit Kommentaren (jsonc) zur Konfiguration einer containerisierten Umgebung.

Da die Containerisierung von Produktions-Workloads immer üblicher wird, sind Entwicklungscontainer über VS Code hinaus für verschiedene Szenarien breit nützlich geworden. Um Entwicklungscontainer in jeder Umgebung zu fördern, wurden Arbeiten an der Development Containers Specification begonnen, die es jedem in jedem Tool ermöglicht, eine konsistente Entwicklungsumgebung zu konfigurieren. Die Open-Source-dev container CLI dient als Referenzimplementierung der Spezifikation.

Die Dev Container CLI

Wenn Tools wie VS Code und Codespaces eine `devcontainer.json`-Datei im Projekt eines Benutzers erkennen, verwenden sie eine CLI, um einen Entwicklungsccontainer zu konfigurieren. Die dev container CLI ist eine Referenzimplementierung, damit einzelne Benutzer und andere Tools Metadaten aus `devcontainer.json` lesen und daraus Entwicklungsccontainer erstellen können.

Diese CLI kann entweder direkt verwendet oder in Produktangebote 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 zur Verwendung der CLI an anderen Stellen

  • Installieren Sie das npm-Paket
  • Verwenden Sie die GitHub Action oder die Azure DevOps Task
  • Bauen Sie das CLI-Repository aus den Quellen

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. Die Wiki-Seite How to Contribute von VS Code enthält Details zu den empfohlenen Toolsets.

npm install -g @devcontainers/cli

Stellen Sie sicher, dass Sie die CLI ausführen und deren Hilfe anzeigen können

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 Befehl open zum Öffnen Ihres Entwicklungsccontainers wird angezeigt, 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 Rechner und starten Sie einen Entwicklungsccontainer mit dem CLI-Befehl up

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 jetzt 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"}

Anschließend können Sie Befehle in diesem Entwicklungsccontainer ausführen

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

Dadurch wird das Rust-Beispiel kompiliert und ausgeführt, 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"}

Die 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 Ihrer Testautomatisierung verwenden möchten, finden Sie Beispiele für GitHub Actions und Azure DevOps Tasks im Repository devcontainers/ci.

Vorbereitendes Erstellen

Der Befehl devcontainer build ermöglicht es Ihnen, schnell ein Image für Entwicklungsccontainer zu erstellen, indem dieselben Schritte wie von der Dev Containers-Erweiterung oder GitHub Codespaces verwendet werden. Dies ist besonders nützlich, wenn Sie ein Image für Entwicklungsccontainer mit einem CI- oder DevOps-Produkt wie GitHub Actions vorab erstellen möchten.

build akzeptiert einen Pfad zum Ordner, der einen Ordner .devcontainer oder eine Datei .devcontainer.json enthält. Zum Beispiel baut 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 zum Beispiel eine Reihe von Images vorab erstellen, die Sie dann in mehreren Projekten oder Repositories wiederverwenden. Gehen Sie dazu wie folgt vor:

  1. Erstellen Sie ein Quellcode-Repository.

  2. Erstellen Sie für jedes Image, das Sie vorab erstellen möchten, eine Konfiguration für Entwicklungsccontainer und passen Sie diese 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 zu zusätzlichen Schritten wie der Authentifizierung finden Sie in der Dokumentation Ihrer Image-Registry (z. B. 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>
    

Probleme mit Images, die mit Docker erstellt wurden, vermeiden

Da Dockerfiles und Docker Compose-Dateien ohne VS Code oder die devcontainer CLI verwendet werden können, sollten Sie Benutzer darauf hinweisen, dass sie das Image nicht direkt erstellen sollten. Mehr erfahren Sie in der erweiterten Dokumentation für Entwicklungsccontainer.

Vorlagen und Features

Sie können mit den Vorlagen und Features für Entwicklungsccontainer über die dev container CLI arbeiten. Wenn Sie Vorlagen erstellen und verwenden, möchten Sie sie vielleicht für andere veröffentlichen. Mehr darüber erfahren Sie in der Dev Container-Spezifikation.

Feedback

Die dev container CLI und die Spezifikation befinden sich in aktiver Entwicklung, und wir freuen uns über Ihr Feedback, das Sie in diesem Issue oder durch neue Issues und Pull Requests im Repository devcontainers/cli geben können.

Nächste Schritte

© . This site is unofficial and not affiliated with Microsoft.