參加你附近的 ,瞭解 VS Code 中的 AI 輔助開發。

開發容器 CLI

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

摘要

使用開發容器 CLI,隨時隨地獲得一致的環境

微軟和 GitHub 的開發容器團隊很高興能釋出一款開源的命令列介面(CLI),作為新的開發容器規範的一部分。我們非常期待您在此 issue 中提供反饋,或在 devcontainers/cli 程式碼倉庫中提交新的 issue 和拉取請求。

一致性 = 愉悅感

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

從歷史上看,容器一直被用於在部署時標準化應用程式,但它也很有潛力支援其他場景,包括持續整合(CI)、測試自動化和功能齊全的編碼環境。開發容器提供了這種功能齊全的編碼環境,並確保您的專案擁有所需的工具和軟體,無論專案是複雜且分散式的,還是隻有一些簡單的需求。

Diagram comparing dev versus production containers

自 2019 年宣佈 Dev Containers 擴充套件以來,Visual Studio Code 就已支援開發容器,最近 GitHub Codespaces 也提供了支援。這種支援基於 devcontainer.json 檔案,這是一種結構化的、支援註釋的 JSON(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 程式碼倉庫中開放審閱,您可以在規範倉庫的這個 issue 中閱讀更多關於其開發的資訊。

我該如何試用?

我們非常希望您能試用 dev container CLI 並告訴我們您的想法。您只需幾個簡單的步驟就可以快速試用,既可以安裝其 npm 包,也可以從原始碼構建 CLI 倉庫。

您可以在 CLI 倉庫的 README 中瞭解更多關於從原始碼構建的資訊。在本文中,我們將重點介紹如何使用 npm 包。

要安裝 npm 包,您需要安裝 Python、Node.js(14 或更高版本)以及 C/C++ 來構建其中一個依賴項。VS Code 的 如何貢獻維基頁面詳細介紹了推薦的工具集。

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 並告訴我們您的想法。我們專門開設了一個 issue,供大家留下評論和問題,您也可以像其他開源專案一樣,在倉庫中提出新的 issue 或 PR。

CLI 和整個規範都處於積極開發中(規範仍在進行中,尚未釋出),敬請期待激動人心的新進展。我們歡迎您對目前 CLI 的反饋,並將持續更新您可以試用的內容和時間,例如規範何時可用。

我們對基於容器的開發的未來感到無比興奮,並迫不及待地想聽到您的反饋。我們期待為所有工具和使用者提供一種普遍適用且高效的格式。

編碼愉快!

Brigit Murtaugh, @BrigitMurtaugh