現已釋出!閱讀關於 11 月新增功能和修復的內容。

開發容器 CLI

本主題涵蓋了開發容器命令列介面 (dev container CLI),它允許您構建和管理開發容器,是 開發容器規範 的配套工具。

開發容器

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

容器(例如 Docker 容器)歷來用於標準化部署的應用,但也有很好的機會來支援其他場景,包括持續整合 (CI)、測試自動化和全功能編碼環境。開發容器提供了這種工作環境,並確保您的專案擁有所需的工具和軟體,無論其複雜性和分散式程度如何,或者僅僅有一些要求。

Diagram comparing dev versus production containers

開發容器在 Visual Studio Code 中透過 Dev Containers 擴充套件以及 GitHub Codespaces 中得到支援。這種支援由 devcontainer.json 提供,這是一種結構化的帶註釋的 JSON (jsonc) 元資料格式,用於配置容器化環境。

隨著生產工作負載的容器化變得普遍,開發容器在 VS Code 之外的場景也變得非常有用。為了在任何環境中推廣開發容器,我們已經啟動了 開發容器規範 的工作,該規範使任何人在任何工具中都能配置一致的開發環境。開源的dev container CLI 是該規範的參考實現。

開發容器 CLI

當 VS Code 和 Codespaces 等工具在使用者的專案中檢測到 devcontainer.json 檔案時,它們會使用 CLI 來配置開發容器。dev container CLI 是一個參考實現,以便個人使用者和其他工具可以讀取 devcontainer.json 元資料並從中建立開發容器。

此 CLI 可以直接使用,也可以整合到產品體驗中,就像它今天與 Dev Containers 和 Codespaces 整合一樣。它目前支援簡單的單容器選項,並與 Docker Compose 整合以處理多容器場景。

CLI 可在 devcontainers/cli 儲存庫中找到。

安裝

您可以透過 Dev Containers 擴充套件快速試用 CLI。從命令面板 (F1) 中選擇 Dev Containers: Install devcontainer CLI 命令。

替代安裝方式

在其他地方使用 CLI 還有其他選項

  • 安裝其 npm 包
  • 使用 GitHub Action 或 Azure DevOps Task
  • 從原始碼構建 CLI

在本頁面,我們將重點介紹如何使用 npm 包。

npm install

要安裝 npm 包,您需要安裝 Python、Node.js(14 或更高版本)和 C/C++ 來構建其中一個依賴項。VS Code 的 貢獻指南 Wiki 提供了有關推薦工具集的詳細資訊。

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 features             Features commands
  devcontainer templates            Templates commands
  devcontainer exec <cmd> [args..]  Execute a command on a running dev container

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

注意: 如果您透過 VS Code 安裝了 CLI,則將列出用於開啟開發容器的 open 命令。

執行 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 儲存庫的 README 中提供。

自動化

如果您想在 CI/CD 構建或測試自動化中使用 dev container CLI,您可以在 devcontainers/ci 儲存庫中找到 GitHub Actions 和 Azure DevOps Tasks 的示例。

預構建

devcontainer build 命令允許您按照 Dev Containers 擴充套件或 GitHub Codespaces 的相同步驟快速構建開發容器映象。當您想使用 CI 或 DevOps 產品(如 GitHub Actions)預構建開發容器映象時,這尤其有用。

build 命令接受指向包含 .devcontainer 資料夾或 .devcontainer.json 檔案的資料夾的路徑。例如,devcontainer build --workspace-folder <my_repo> 將為 my_repo 構建容器映象。

構建併發布映象的示例

例如,您可能希望預先構建多個映象,然後跨多個專案或儲存庫重用它們。為此,請執行以下步驟:

  1. 建立一個原始碼儲存庫。

  2. 為每個要預構建的映象建立開發容器配置,根據需要進行自定義(包括 開發容器功能)。例如,考慮此 devcontainer.json 檔案:

    {
      "build": {
        "dockerfile": "Dockerfile"
      },
      "features": {
        "ghcr.io/devcontainers/features/docker-in-docker:1": {
          "version": "latest"
        }
      }
    }
    
  3. 使用 devcontainer build 命令構建映象,並將其推送到您的映象登錄檔中。有關映象命名和身份驗證等額外步驟的資訊,請參閱您的映象登錄檔文件(例如 Azure Container RegistryGitHub Container RegistryDocker Hub)。

    devcontainer build --workspace-folder <my_repo> --push true --image-name <my_image_name>:<optional_image_version>
    

避免使用 Docker 構建的映象出現問題

由於 Dockerfiles 和 Docker Compose 檔案可以在沒有 VS Code 或 devcontainer CLI 的情況下使用,您可能想告知使用者他們不應嘗試直接構建映象。您可以在 高階開發容器文件 中瞭解更多資訊。

模板和功能

您可以使用 dev container CLI 來處理開發容器 模板功能。在建立和使用模板時,您可能希望將它們釋出給他人,您可以在 dev container spec 中瞭解更多資訊。

反饋

dev container CLI 和規範正在積極開發中,我們歡迎您的反饋,您可以透過 此 issue,或在 devcontainers/cli 儲存庫中提交新的 issue 和拉取請求來提供反饋。

後續步驟

© . This site is unofficial and not affiliated with Microsoft.