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.

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
- Diese finden Sie unter devcontainers/ci
- Bauen Sie das CLI-Repository aus den Quellen
- Mehr über das Erstellen aus Quellen erfahren Sie in der README-Datei 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. 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
openzum Ö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:
-
Erstellen Sie ein Quellcode-Repository.
-
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" } } } -
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
- Repository der Dev-Container-Spezifikation – Lesen und tragen Sie zur offenen Spezifikation bei.
- devcontainer.json-Referenz – Überprüfen Sie das
devcontainer.json-Schema. - Entwicklungsccontainer erstellen – Erstellen Sie einen benutzerdefinierten Container für Ihre Arbeitsumgebung.
- Fortgeschrittene Container – Finden Sie Lösungen für fortgeschrittene Container-Szenarien.