Dev Container CLI
このトピックでは、開発コンテナーのビルドと管理を可能にする開発コンテナー コマンド ライン インターフェイス (dev container CLI) について説明します。これは、Development Containers Specification の補助ツールです。
開発コンテナー
一貫性があり、予測可能な環境は、生産的で快適なソフトウェア開発体験の鍵となります。
コンテナー (例えば Docker コンテナー) は、これまでアプリケーションのデプロイ時に標準化するために使用されてきましたが、継続的インテグレーション (CI)、テスト自動化、フル機能のコーディング環境など、追加のシナリオをサポートする大きな機会があります。開発コンテナーは、この作業環境を提供し、複雑で分散したプロジェクトであっても、いくつかの要件しかないプロジェクトであっても、必要なツールとソフトウェアをプロジェクトが確実に利用できるようにします。
開発コンテナーは、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 Action または Azure DevOps Task を使用する
- これらは devcontainers/ci にあります
- ソースから CLI リポジトリをビルドする
- ソースからのビルドについては、CLI リポジトリの README で詳しく学ぶことができます
このページでは、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
のコンテナー イメージをビルドします。
イメージのビルドと公開の例
たとえば、複数のプロジェクトやリポジトリで再利用する多数のイメージを事前にビルドしたい場合があります。その場合は、次の手順に従ってください
-
ソースコードリポジトリを作成します。
-
事前ビルドしたい各イメージのdev container構成を作成し、( dev container Features を含め) 自由にカスタマイズします。たとえば、この
devcontainer.json
ファイルを考えてみましょう。{ "build": { "dockerfile": "Dockerfile" }, "features": { "ghcr.io/devcontainers/features/docker-in-docker:1": { "version": "latest" } } }
-
devcontainer build
コマンドを使用してイメージをビルドし、イメージ レジストリにプッシュします。イメージの命名や認証などの追加の手順については、ご利用のイメージ レジストリ (たとえば 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 container CLI を使用して、開発コンテナーのテンプレートと機能を操作できます。テンプレートを作成して使用する際、他のユーザー向けに公開したい場合があります。詳細については、開発コンテナーの仕様で確認できます。
フィードバック
dev container CLI とその仕様は活発に開発中であり、皆様からのフィードバックを歓迎します。このイシュー、または devcontainers/cli リポジトリの新しいイシューやプルリクエストを通じて提供してください。
次のステップ
- Dev container specification repository - オープン仕様を読み、貢献してください。
- devcontainer.jsonリファレンス -
devcontainer.json
スキーマを確認します。 - 開発コンテナーを作成する - 作業環境用のカスタムコンテナーを作成します。
- 高度なコンテナー - 高度なコンテナーシナリオの解決策を見つけます。