开发容器命令行界面
本主题涵盖了开发容器命令行界面(dev container CLI),该界面允许您构建和管理开发容器,并且是开发容器规范的补充。
开发容器
一个一致、可预测的环境是高效和愉快的软件开发体验的关键。
容器(例如 Docker 容器)在过去被用来标准化应用程序的部署,但支持更多场景有很大的机会,包括持续集成(CI)、测试自动化和完整的编码环境。一个 开发容器 提供了这种工作环境,并确保您的项目拥有所需工具和软件,无论是复杂且分布式还是只有少数要求。

Visual Studio Code 支持开发容器,通过 Dev Containers 扩展和在 GitHub Codespaces 中支持。此支持由 devcontainer.json 提供支持,这是一种带有注释的JSON(jsonc)元数据格式,用于配置容器化环境。
随着生产工作负载的容器化变得普遍,开发容器在 VS Code 之外的场景中变得广泛有用。为了在任何环境中推广开发容器,已经开始开发 开发容器规范,该规范使任何人使用任何工具都能配置一致的开发环境。开源的 开发容器 CLI 是该规范的参考实现。
开发容器 CLI
当像 VS Code 和 Codespaces 这样的工具检测到一个devcontainer.json用户项目中的文件,他们使用 CLI 配置开发容器。开发容器 CLI 是一个参考实现,以便个人用户和其他工具可以读取devcontainer.json元数据并从中创建开发容器。
该 CLI 可以直接使用,也可以集成到产品体验中,类似于它今天如何与 Dev Containers 和 Codespaces 集成。它目前支持简单的单容器选项,并且与 Docker Compose 集成以支持多容器场景。
CLI 可在 devcontainers/cli 仓库中找到。
安装
您可以通过Dev Containers扩展快速尝试CLI。选择命令面板中的Dev Containers: 安装devcontainer CLI命令(F1)。
备用安装
在其他地方使用 CLI 还有其他选项:
- 安装其npm包
- 使用 GitHub Action 或 Azure DevOps 任务
- 你可能会在 devcontainers/ci 找到这些
- 从源代码构建 CLI 仓库
在此页面上,我们将重点介绍使用npm包。
npm 安装
要安装npm包,您需要安装Python、Node.js(版本14或更高版本)和C/C++来构建其中一个依赖项。VS Code如何贡献维基有推荐工具集的详细信息。
npm install -g @devcontainers/cli
验证您是否可以运行 CLI 并查看其帮助文本:
开发容器 <命令d>
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
选项:
--help 显示 帮助 [布尔值]
--version 显示 版本 号 [布尔值]
注意:
打开如果您通过 VS Code 安装了 CLI,将列出用于打开您的开发容器的命令。
运行命令行界面
一旦你有了 CLI,你可以用一个示例项目来试试,比如这个 Rust 示例.
克隆 Rust 示例到你的机器,并使用 CLI 启动一个开发容器向上命令:
git clone https://github.com/microsoft/vscode-remote-try-rust
devcontainer up --workspace-folder <vscode-remote-try-rust的路径t>
这将从容器注册表下载容器镜像并启动容器。您的 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 容器 已启动
容器 已启动
{"结果":"成功","容器ID":"f0a055ff056c1c1bb99cc09930efbf3a0437c54d9b4644695aa23c1d57b4bd11","远程用户":"vscode","远程工作区文件夹":"/workspaces/vscode-remote-try-rust"}
然后,您可以在该开发容器中运行命令:
devcontainer 执行 --工作区文件夹 <路径到vscode-remote-try-rus > cargo 运行
这将编译并运行 Rust 示例,输出:
[33 毫秒] dev-containers-cli 0.1.0.
编译 hello_remote_world v0.1.0 (/workspaces/vscode-remote-try-rust)
完成 dev [未优化 + 调试信息] 目标(s) 在 1.06秒
运行 `target/debug/hello_remote_world`
你好, VS Code Dev Containers!
{"结果":"成功"}
以上步骤也包含在 CLI repo 的 README 中。
自动化
如果您希望在CI/CD构建或测试自动化中使用开发容器CLI,可以在devcontainers/ci仓库中找到GitHub Actions和Azure DevOps Tasks的示例。
预构建
该开发容器构建命令允许您按照与Dev Containers扩展或GitHub Codespaces相同的步骤快速构建开发容器镜像。这在您想使用GitHub Actions等CI或DevOps产品预构建开发容器镜像时特别有用。
构建接受一个包含文件夹的路径.devcontainer文件夹或.devcontainer.json文件。例如,devcontainer build --workspace-folder 将构建容器镜像我的仓库输入:.
构建和发布镜像示例
例如,您可能希望预先构建一些镜像,然后在多个项目或存储库中重复使用。要这样做,请按照以下步骤操作:
-
创建一个源代码仓库。
-
为每个需要预构建的镜像创建开发容器配置,并根据需要进行自定义(包括开发容器功能)。例如,考虑这个
devcontainer.json文件:{ "构建": { "Dockerfile": "Dockerfile" }, "功能": { "ghcr.io/devcontainers/功能/Docker-in-Docker:1": { "版本": "最新" } } } -
使用
开发容器构建命令来构建镜像并 推送 到你的镜像注册表。查看你的镜像注册表文档(如 Azure Container Registry、GitHub Container Registry 或 Docker Hub)以获取镜像命名和额外步骤(如认证)的信息。devcontainer build --workspace-folder <my_repo> --推送 true --image-name <my_image_name>:<optional_image_version>
避免使用Docker构建的镜像出现的问题
给定Dockerfiles和Docker Compose文件可以不使用VS Code或开发容器 CLI,您可能需要告知用户他们不应直接构建镜像。您可以在高级开发容器文档中了解更多信息。
模板和功能
你可以使用开发容器 模板 和 功能 通过开发容器 CLI。当你创建和使用模板时,你可能希望将其发布给他人,这在 开发容器规范 中有更详细的介绍。
反馈
开发容器 CLI 和规范正在积极开发中,我们欢迎您的反馈,您可以通过 此问题 提供反馈,或者通过在 devcontainers/cli 仓库中提交新问题和拉取请求来提供反馈。
下一步
- 开发容器规范代码库 - 阅读并为开放规范做出贡献。
- devcontainer.json 参考 - 查看
devcontainer.json模式。 - 创建开发容器 - 为您的工作环境创建自定义容器。
- 高级容器 - 寻找高级容器场景的解决方案。