🚀 在 VS Code 中免費取得

Dev Container CLI

2022 年 5 月 18 日,作者:Brigit Murtaugh,@BrigitMurtaugh

TL;DR

透過 dev container CLI 在任何地方獲得一致的環境

Microsoft 和 GitHub 的開發容器團隊很高興發布開放原始碼命令列介面 (CLI),作為全新 開發容器規格 的一部分。我們希望您在 此問題 中提供意見反應,或在 devcontainers/cli 儲存庫中提出新問題和提取要求。

一致性 = 喜悅

一致且可預測的環境是實現高效且愉悅的軟體開發體驗的關鍵。

容器在歷史上一直用於標準化部署的應用程式,但現在有絕佳的機會來支援其他情境,包括持續整合 (CI)、測試自動化和全功能編碼環境。開發容器提供此全功能編碼環境,並確保您的專案擁有所需的工具和軟體,無論專案複雜且分散,還是只有少數需求。

Diagram comparing dev versus production containers

自 2019 年 發布 Dev Containers 擴充功能 以來,Visual Studio Code 便已支援開發容器,而最近 GitHub Codespaces 也開始支援。此支援由 devcontainer.json 提供技術支援,這是一種結構化 JSON with Comments (jsonc) 中繼資料格式,用於設定容器化環境。

隨著容器化生產工作負載變得司空見慣,開發容器已變得廣泛適用於 VS Code 以外的情境。我們很高興宣布 開發容器規格 的工作已開始,此規格讓任何工具中的任何人都能設定一致的開發環境。此外,今天我們很高興分享此規格的主要元件,您現在可以試用,也就是 dev container CLI

什麼是 dev container CLI?

dev container CLI 是開發容器規格的參考實作。

當 VS Code 和 Codespaces 等工具偵測到使用者專案中的 devcontainer.json 檔案時,它們會使用 CLI 來設定開發容器。我們現在已開放此 CLI 作為參考實作,以便個別使用者和其他工具可以讀取 devcontainer.json 中繼資料並從中建立開發容器。

此 CLI 可以直接使用,也可以整合到產品體驗中,類似於它今天與 Dev Containers 和 Codespaces 的整合方式。它目前同時支援簡單的單一容器選項,並與 Docker Compose 整合以用於多容器情境。

此 CLI 可在新的 devcontainers/cli 儲存庫中檢閱,您可以在 規格儲存庫中的此問題 中閱讀更多關於其開發的資訊。

我該如何試用?

我們希望您試用 dev container CLI,並告訴我們您的想法。您只需幾個簡單的步驟即可快速試用,方法是安裝其 npm 套件或從來源建置 CLI 儲存庫。

您可以在 CLI 儲存庫的 README 中瞭解更多關於從來源建置的資訊。在這篇文章中,我們將重點介紹如何使用 npm 套件。

若要安裝 npm 套件,您需要安裝 Python、Node.js (版本 14 或更高版本) 和 C/C++,以建置其中一個相依性。VS Code 如何貢獻 Wiki 包含關於建議工具組的詳細資訊。

npm install

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 exec <cmd> [args..]  Execute a command on a running dev container

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

試用 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"}

恭喜,您剛剛執行了 dev container CLI 並看到了它的實際運作!

CLI 儲存庫的 README 中也提供了這些步驟。

我該如何參與?

您的意見反應對於塑造和擴展規格非常有幫助,我們希望收到您對目前為止的 CLI 的意見反應。請查看 CLI 並告訴我們您的想法。我們已 開啟一個問題,專門供人們留下評論和問題,您也可以像其他開放原始碼專案一樣,在儲存庫中開啟新問題或 PR。

CLI 和整體規格正在積極開發中 (規格 仍在進行中,尚未發布),因此請繼續關注令人興奮的新進展。我們歡迎您對 目前為止的 CLI 提供意見反應,我們將繼續提供關於您可以試用的內容和時間的更新,例如規格何時可用。

我們對基於容器的開發的未來感到非常興奮,並且迫不及待想聽到您的意見反應。我們期待為各種工具和使用者提供無所不在、高效率的格式。

Coding 愉快!

Brigit Murtaugh,@BrigitMurtaugh