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.

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
- Sie finden diese im Repository devcontainers/ci
- Erstellen der CLI aus dem Quellcode
- Mehr über das Erstellen aus dem Quellcode erfahren Sie in der README des CLI-Repositorys
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
-
Erstellen Sie ein Quellcode-Repository.
-
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" } } } -
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
- Dev-Container-Spezifikations-Repository - Lesen Sie die offene Spezifikation und tragen Sie dazu bei.
- devcontainer.json-Referenz – Überprüfen Sie das
devcontainer.json-Schema. - Erstellen eines Entwicklungs-Containers - Erstellen Sie einen benutzerdefinierten Container für Ihre Arbeitsumgebung.
- Fortgeschrittene Container – Finden Sie Lösungen für fortgeschrittene Container-Szenarien.