開発コンテナー CLI
このトピックでは、開発コンテナーの構築と管理を可能にする開発コンテナー コマンドライン インターフェイス (dev container CLI) について説明します。これは、Development Containers Specification (開発コンテナー仕様) のコンパニオンツールです。
開発コンテナー
一貫性のある予測可能な環境は、生産的で快適なソフトウェア開発体験の鍵となります。
コンテナー(例:Docker コンテナー)は、歴史的にアプリケーションのデプロイ時の標準化に使用されてきましたが、継続的インテグレーション (CI)、テスト自動化、フル機能のコーディング環境など、さらなるシナリオをサポートする大きな機会があります。開発コンテナーは、複雑で分散されたプロジェクトであれ、いくつかの要件しかないプロジェクトであれ、プロジェクトに必要なツールとソフトウェアを備えた作業環境を提供し、その環境を保証します。

開発コンテナーは、Visual Studio Code では Dev Containers 拡張機能を通じて、また GitHub Codespaces でサポートされています。このサポートは、コンテナー化された環境を構成するための、コメント付き JSON (jsonc) メタデータ形式である devcontainer.json によって支えられています。
本番環境のワークロードのコンテナー化が一般的になるにつれ、dev コンテナーは VS Code 以外のシナリオでも広く役立つようになりました。あらゆる環境で dev コンテナーを推進するために、Development Containers Specification の策定が開始されました。これにより、誰でも、どのツールからでも、一貫性のある開発環境を構成できるようになります。オープンソースの dev container CLI は、この仕様のリファレンス実装として機能します。
開発コンテナ CLI
VS Code や Codespaces などのツールがユーザーのプロジェクト内で devcontainer.json ファイルを検出すると、CLI を使用して dev コンテナーを構成します。dev container CLI はリファレンス実装であるため、個々のユーザーや他のツールが devcontainer.json メタデータを読み取り、それに基づいて dev コンテナーを作成することができます。
この CLI は、現在 Dev Containers や Codespaces に統合されているのと同様に、直接使用することも、製品体験に統合することも可能です。現在はシンプルな単一コンテナーのオプションをサポートしており、マルチコンテナーのシナリオ向けに Docker Compose との統合も備えています。
CLI は devcontainers/cli リポジトリで入手できます。
インストール
Dev Containers 拡張機能を通じて CLI を素早く試すことができます。コマンドパレット (F1) から Dev Containers: Install devcontainer CLI コマンドを選択してください。
その他のインストール方法
CLI を他の場所で使用するための追加オプションがあります
- npm パッケージをインストールする
- GitHub Action または Azure DevOps タスクを使用する
- これらは devcontainers/ci で確認できます
- ソースから CLI リポジトリをビルドする
- ソースからのビルドについての詳細は、CLI リポジトリの README を参照してください
このページでは、npm パッケージの使用に焦点を当てます。
npm install
npm パッケージをインストールするには、依存関係の一部をビルドするために 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]
注: CLI を VS Code 経由でインストールした場合、dev コンテナーを開くための
openコマンドがリストに含まれます。
CLI の実行
CLI を入手したら、この Rust サンプルのようなサンプルプロジェクトで試すことができます。
Rust サンプルをローカルにクローンし、CLI の up コマンドで dev コンテナーを起動します
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"}
その後、この dev コンテナー内でコマンドを実行できます
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 タスクの例を確認できます。
事前ビルド
devcontainer build コマンドを使用すると、Dev Containers 拡張機能や GitHub Codespaces と同じ手順で、dev コンテナーイメージを迅速にビルドできます。これは、GitHub Actions のような CI または DevOps 製品を使用して dev コンテナーイメージを事前ビルドしたい場合に特に便利です。
build は、.devcontainer フォルダーまたは .devcontainer.json ファイルを含むフォルダーへのパスを受け取ります。例えば、devcontainer build --workspace-folder <my_repo> は my_repo のコンテナーイメージをビルドします。
イメージをビルドして公開する例
例えば、複数のプロジェクトやリポジトリ間で再利用するために、多数のイメージを事前ビルドしたい場合があります。その場合は、以下の手順に従ってください
-
ソースコードリポジトリを 作成 します。
-
事前ビルドしたい各イメージに対して、必要に応じてカスタマイズ(dev container Features を含む)を行い、dev コンテナー構成を作成します。例えば、次の
devcontainer.jsonファイルを検討してください{ "build": { "dockerfile": "Dockerfile" }, "features": { "ghcr.io/devcontainers/features/docker-in-docker:1": { "version": "latest" } } } -
devcontainer buildコマンドを使用してイメージをビルドし、プッシュ (push) してイメージレジストリに保存します。イメージの命名規則や認証などの追加手順については、お使いのイメージレジストリのドキュメント(Azure Container Registry、GitHub 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 コンテナーの高度なドキュメントを参照してください。
テンプレートと機能 (Features)
dev container CLI を使用して、dev コンテナーの Templates (テンプレート) および Features (機能) を操作できます。テンプレートを作成して使用する際、他のユーザーのために公開したい場合は、dev container 仕様で詳細を確認できます。
フィードバック
dev container CLI と仕様は現在活発に開発中です。フィードバックを歓迎します。こちらの issue、または devcontainers/cli リポジトリでの新しい issue やプルリクエストを通じてお寄せください。
次のステップ
- Dev container specification リポジトリ - オープンな仕様を読み、貢献する。
- devcontainer.jsonリファレンス -
devcontainer.jsonスキーマを確認します。 - 開発コンテナーの作成 - 作業環境用のカスタムコンテナーを作成する。
- 高度なコンテナ - 高度なコンテナシナリオのソリューションを見つけます。