🚀 VS Code で で入手しましょう!

Dev Container CLI

このトピックでは、開発コンテナの構築と管理を可能にする開発コンテナコマンドラインインターフェース (Dev Container CLI) について説明します。これは、Development Containers Specification の補完的なものです。

開発コンテナ

一貫性があり予測可能な環境は、生産的で楽しいソフトウェア開発体験の鍵です。

コンテナ(例:Docker コンテナ)は、これまでアプリのデプロイ時に標準化するために使用されてきましたが、継続的インテグレーション(CI)、テスト自動化、およびフル機能のコーディング環境を含む追加のシナリオをサポートする絶好の機会があります。開発コンテナは、この作業環境を提供し、プロジェクトが複雑で分散されているか、またはいくつかの要件しかないかにかかわらず、必要なツールとソフトウェアを確実に備えているようにします。

Diagram comparing dev versus production containers

開発コンテナは、Visual Studio Code では Dev Containers 拡張機能を通じて、GitHub Codespaces ではを通じてサポートされています。このサポートは、コンテナ化された環境を構成するための構造化 JSON with Comments(jsonc)メタデータ形式である devcontainer.json によって支えられています。

本番ワークロードのコンテナ化が一般的になるにつれて、開発コンテナは VS Code を超えたシナリオで広く役立つようになりました。任意の環境で開発コンテナを推進するために、Development Containers Specification の作業が開始されました。これにより、任意のツールの誰もが一貫した開発環境を構成できるようになります。オープンソースの Dev Container CLI は、仕様の参照実装として機能します。

Dev Container 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 Actions または Azure DevOps Task を使用する
  • ソースから CLI リポジトリをビルドする

このページでは、npm パッケージの使用に焦点を当てます。

npm install

npm パッケージをインストールするには、依存関係の 1 つをビルドするために、Python、Node.js (バージョン 14 以上)、および C/C++ がインストールされている必要があります。VS Code の How to Contribute 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 で使用されるのと同じ手順に従って、開発コンテナイメージをすばやく構築できます。これは、GitHub Actions などの CI または DevOps 製品を使用して開発コンテナイメージを事前ビルドする場合に特に役立ちます。

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 Registry、または Docker Hub など)を参照してください。

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

Docker を使用して構築されたイメージに関する問題の回避

Dockerfile および Docker Compose ファイルは VS Code または devcontainer CLI なしで使用できるため、ユーザーにイメージを直接ビルドしようとしないように知らせる必要がある場合があります。詳細については、高度な開発コンテナのドキュメントを参照してください。

テンプレートと機能

Dev Container CLI を使用して、開発コンテナの テンプレート機能 を操作できます。テンプレートを作成および使用する際に、他のユーザーのために公開したい場合があります。詳細については、開発コンテナ仕様 を参照してください。

フィードバック

Dev Container CLI と仕様は活発に開発されており、フィードバックをお待ちしております。この issue で提供するか、devcontainers/cli リポジトリで新しい issue とプルリクエストを通じて提供してください。

次のステップ