開發容器 CLI
2022 年 5 月 18 日,作者:Brigit Murtaugh,@BrigitMurtaugh
總結
使用開發容器 CLI 隨時隨地實現一致環境
Microsoft 和 GitHub 的開發容器團隊很高興釋出一個開源命令列介面 (CLI),作為新的開發容器規範的一部分。我們很期待您在此問題中,或在 devcontainers/cli 儲存庫中提出新問題和拉取請求。
一致性 = 愉悅
一個一致、可預測的環境是實現高效愉快的軟體開發體驗的關鍵。
容器歷來用於在部署時標準化應用程式,但它們在支援其他場景方面有著巨大的機會,包括持續整合 (CI)、測試自動化和功能齊全的編碼環境。開發容器提供了這種功能齊全的編碼環境,並確保您的專案擁有所需的工具和軟體,無論它複雜且分散式,還是隻有幾個要求。

自 2019 年宣佈 開發容器擴充套件以來,Visual Studio Code 中就一直支援開發容器,最近在 GitHub Codespaces 中也得到了支援。這種支援由 devcontainer.json 提供支援,這是一種帶有註釋 (jsonc) 的結構化 JSON 元資料格式,用於配置容器化環境。
隨著容器化生產工作負載變得司空見慣,開發容器在 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提出反饋,我們將繼續提供有關您可以試用什麼以及何時試用的更新,例如規範何時可用。
我們對基於容器的開發的未來感到非常興奮,迫不及待地想聽取您的反饋。我們期待為工具和使用者提供一個無處不在、高效的格式。
編碼愉快!
Brigit Murtaugh, @BrigitMurtaugh