开发容器命令行工具
2022年5月18日,由 Brigit Murtaugh (@BrigitMurtaugh) 发布
摘要
使用开发容器命令行工具,随处获得一致的环境
Microsoft 和 GitHub 的开发容器团队很高兴能发布一个开源的命令行接口 (CLI),作为新的开发容器规范的一部分。我们非常期待您在此 issue中提供反馈,或者在 devcontainers/cli 仓库中提交新的 issue 和拉取请求。
一致性 = 愉悦
一个一致、可预测的环境是高效、愉悦的软件开发体验的关键。
容器历来用于在部署时标准化应用程序,但它也有巨大潜力支持其他场景,包括持续集成 (CI)、测试自动化和功能齐全的编码环境。开发容器提供了这种功能齐全的编码环境,并确保您的项目拥有所需的工具和软件,无论项目是复杂和分布式的,还是只有一些简单的需求。
自 2019 年宣布开发容器扩展以来,Visual Studio Code 就已支持开发容器,最近 GitHub Codespaces 也提供了支持。这种支持基于 devcontainer.json,这是一种结构化的、支持注释的 JSON (jsonc) 元数据格式,用于配置容器化的环境。
随着生产工作负载的容器化变得越来越普遍,开发容器在 VS Code 之外的场景中也变得广泛适用。我们很高兴地宣布,开发容器规范的工作已经启动,它使任何人在任何工具中都能配置一致的开发环境。此外,今天我们很高兴地与大家分享该规范的一个主要组成部分,您现在就可以试用它,那就是开发容器 CLI。
什么是开发容器 CLI?
开发容器 CLI 是开发容器规范的参考实现。
当 VS Code 和 Codespaces 等工具在用户项目中检测到 devcontainer.json
文件时,它们会使用一个 CLI 来配置开发容器。我们现在将此 CLI 作为参考实现开放出来,以便个人用户和其他工具可以读取 devcontainer.json
元数据并据此创建开发容器。
此 CLI 可以直接使用,也可以集成到产品体验中,就像它今天与开发容器和 Codespaces 集成的方式一样。它目前既支持简单的单容器选项,也支持与 Docker Compose 集成以应对多容器场景。
此 CLI 现已在新的 devcontainers/cli 仓库中可供审阅,您可以在规范仓库的这个 issue 中了解更多关于其开发的信息。
我该如何试用?
我们非常希望您能试用开发容器 CLI,并告诉我们您的想法。您只需几个简单的步骤即可快速试用,可以通过安装其 npm 包,也可以从源代码构建 CLI 仓库。
您可以在 CLI 仓库的 README 中了解更多关于从源代码构建的信息。在本文中,我们将重点介绍如何使用 npm 包。
要安装 npm 包,您需要安装 Python、Node.js (版本 14 或更高) 和 C/C++ 来构建其中一个依赖项。VS Code 的 “如何贡献”维基页面详细介绍了推荐的工具集。
npm 安装
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"}
恭喜,您刚刚运行了开发容器 CLI 并亲眼见证了它的实际操作!
这些步骤也记录在 CLI 仓库的 README 中。
我该如何参与?
您的反馈对于塑造和扩展规范非常有帮助,我们非常期待您对 CLI 的反馈。请试用 CLI 并告诉我们您的想法。我们专门开设了一个 issue,供大家留下评论和问题,您也可以像其他开源项目一样,在仓库中提交新的 issue 或 PR。
CLI 和整个规范都处于积极开发中(规范仍在进行中,尚未发布),敬请期待激动人心的新进展。我们欢迎您对迄今为止的 CLI 提供反馈,我们将继续提供有关您可以试用什么以及何时试用的更新,例如规范何时可用。
我们对基于容器的开发的未来感到无比兴奋,并迫不及待地想听到您的反馈。我们期待着为各种工具和用户提供一种无处不在、高效的格式。
编码愉快!
Brigit Murtaugh, @BrigitMurtaugh