開發容器 CLI
本主題涵蓋了開發容器命令列介面 (dev container CLI),它允許您構建和管理開發容器,是 開發容器規範 的配套工具。
開發容器
一致且可預測的環境是高效且愉快的軟體開發體驗的關鍵。
容器(例如 Docker 容器)歷來用於標準化部署的應用,但也有很好的機會來支援其他場景,包括持續整合 (CI)、測試自動化和全功能編碼環境。開發容器提供了這種工作環境,並確保您的專案擁有所需的工具和軟體,無論其複雜性和分散式程度如何,或者僅僅有一些要求。

開發容器在 Visual Studio Code 中透過 Dev Containers 擴充套件以及 GitHub Codespaces 中得到支援。這種支援由 devcontainer.json 提供,這是一種結構化的帶註釋的 JSON (jsonc) 元資料格式,用於配置容器化環境。
隨著生產工作負載的容器化變得普遍,開發容器在 VS Code 之外的場景也變得非常有用。為了在任何環境中推廣開發容器,我們已經啟動了 開發容器規範 的工作,該規範使任何人在任何工具中都能配置一致的開發環境。開源的dev container CLI 是該規範的參考實現。
開發容器 CLI
當 VS Code 和 Codespaces 等工具在使用者的專案中檢測到 devcontainer.json 檔案時,它們會使用 CLI 來配置開發容器。dev container CLI 是一個參考實現,以便個人使用者和其他工具可以讀取 devcontainer.json 元資料並從中建立開發容器。
此 CLI 可以直接使用,也可以整合到產品體驗中,就像它今天與 Dev Containers 和 Codespaces 整合一樣。它目前支援簡單的單容器選項,並與 Docker Compose 整合以處理多容器場景。
CLI 可在 devcontainers/cli 儲存庫中找到。
安裝
您可以透過 Dev Containers 擴充套件快速試用 CLI。從命令面板 (F1) 中選擇 Dev Containers: Install devcontainer CLI 命令。
替代安裝方式
在其他地方使用 CLI 還有其他選項
- 安裝其 npm 包
- 使用 GitHub Action 或 Azure DevOps Task
- 您可以在 devcontainers/ci 中找到它們
- 從原始碼構建 CLI
- 您可以在 CLI 儲存庫的 README 中瞭解更多關於從原始碼構建的資訊。
在本頁面,我們將重點介紹如何使用 npm 包。
npm install
要安裝 npm 包,您需要安裝 Python、Node.js(14 或更高版本)和 C/C++ 來構建其中一個依賴項。VS Code 的 貢獻指南 Wiki 提供了有關推薦工具集的詳細資訊。
npm install -g @devcontainers/cli
驗證您是否可以執行 CLI 並檢視其幫助文字
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]
注意: 如果您透過 VS Code 安裝了 CLI,則將列出用於開啟開發容器的
open命令。
執行 CLI
一旦有了 CLI,您就可以使用示例專案進行嘗試,例如這個 Rust 示例。
將 Rust 示例克隆到您的機器,然後使用 CLI 的 up 命令啟動開發容器。
git clone https://github.com/microsoft/vscode-remote-try-rust
devcontainer up --workspace-folder <path-to-vscode-remote-try-rust>
這將從容器登錄檔中下載容器映象並啟動容器。您的 Rust 容器現在應該正在執行。
[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"}
然後,您可以在此開發容器中執行命令
devcontainer exec --workspace-folder <path-to-vscode-remote-try-rust> cargo run
這將編譯並執行 Rust 示例,輸出為:
[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"}
上述步驟也已在 CLI 儲存庫的 README 中提供。
自動化
如果您想在 CI/CD 構建或測試自動化中使用 dev container CLI,您可以在 devcontainers/ci 儲存庫中找到 GitHub Actions 和 Azure DevOps Tasks 的示例。
預構建
devcontainer build 命令允許您按照 Dev Containers 擴充套件或 GitHub Codespaces 的相同步驟快速構建開發容器映象。當您想使用 CI 或 DevOps 產品(如 GitHub Actions)預構建開發容器映象時,這尤其有用。
build 命令接受指向包含 .devcontainer 資料夾或 .devcontainer.json 檔案的資料夾的路徑。例如,devcontainer build --workspace-folder <my_repo> 將為 my_repo 構建容器映象。
構建併發布映象的示例
例如,您可能希望預先構建多個映象,然後跨多個專案或儲存庫重用它們。為此,請執行以下步驟:
-
建立一個原始碼儲存庫。
-
為每個要預構建的映象建立開發容器配置,根據需要進行自定義(包括 開發容器功能)。例如,考慮此
devcontainer.json檔案:{ "build": { "dockerfile": "Dockerfile" }, "features": { "ghcr.io/devcontainers/features/docker-in-docker:1": { "version": "latest" } } } -
使用
devcontainer build命令構建映象,並將其推送到您的映象登錄檔中。有關映象命名和身份驗證等額外步驟的資訊,請參閱您的映象登錄檔文件(例如 Azure Container Registry、GitHub Container Registry 或 Docker Hub)。devcontainer build --workspace-folder <my_repo> --push true --image-name <my_image_name>:<optional_image_version>
避免使用 Docker 構建的映象出現問題
由於 Dockerfiles 和 Docker Compose 檔案可以在沒有 VS Code 或 devcontainer CLI 的情況下使用,您可能想告知使用者他們不應嘗試直接構建映象。您可以在 高階開發容器文件 中瞭解更多資訊。
模板和功能
您可以使用 dev container CLI 來處理開發容器 模板和 功能。在建立和使用模板時,您可能希望將它們釋出給他人,您可以在 dev container spec 中瞭解更多資訊。
反饋
dev container CLI 和規範正在積極開發中,我們歡迎您的反饋,您可以透過 此 issue,或在 devcontainers/cli 儲存庫中提交新的 issue 和拉取請求來提供反饋。
後續步驟
- Dev container 規範儲存庫 - 閱讀和貢獻開放規範。
- devcontainer.json 參考 - 檢視
devcontainer.json模式。 - 建立開發容器 - 為您的工作環境建立自定義容器。
- 高階容器 - 查詢高階容器場景的解決方案。