Dev Container CLI
このトピックでは、開発コンテナーのビルドと管理を可能にする開発コンテナー コマンド ライン インターフェイス (dev container CLI) について説明します。これは、Development Containers Specification のコンパニオンです。
開発コンテナー
一貫性のある予測可能な環境は、生産的で楽しいソフトウェア開発体験の鍵となります。
コンテナー (例: Docker コンテナー) は、デプロイ時にアプリを標準化するために歴史的に使用されてきましたが、継続的インテグレーション (CI)、テスト自動化、フル機能のコーディング環境など、追加のシナリオをサポートする絶好の機会があります。開発コンテナーは、この作業環境を提供し、複雑で分散したプロジェクトであろうと、いくつかの要件しかないプロジェクトであろうと、プロジェクトに必要なツールとソフトウェアを保証します。
開発コンテナーは、Visual Studio Code では Dev Containers 拡張機能を通じて、また GitHub Codespaces ではサポートされています。このサポートは、コンテナー化された環境を構成するための、コメント付き構造化 JSON (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: devcontainer CLI をインストールコマンドを選択します。
別のインストール方法
他の場所で CLI を使用するための追加オプションがあります
- npm パッケージをインストールする
- GitHub Actions または Azure DevOps Task を使用する
- これらは devcontainers/ci にあります。
- CLI リポジトリをソースからビルドする
- ソースからのビルドの詳細については、CLI リポジトリの README を参照してください。
このページでは、npm パッケージの使用に焦点を当てます。
npm のインストール
npm パッケージをインストールするには、依存関係の 1 つをビルドするために Python、Node.js (バージョン 14 以降)、および C/C++ がインストールされている必要があります。VS Code の貢献方法ウィキには、推奨されるツールセットに関する詳細が記載されています。
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 ビルドまたはテスト自動化で開発コンテナー CLI を使用する場合は、devcontainers/ci リポジトリで GitHub Actions および Azure DevOps タスクの例を見つけることができます。
事前ビルド
devcontainer build
コマンドを使用すると、Dev Containers 拡張機能や GitHub Codespaces と同じ手順に従って、開発コンテナー イメージをすばやくビルドできます。これは、GitHub Actions などの CI または DevOps 製品を使用して開発コンテナー イメージを事前ビルドする場合に特に便利です。
build
は、.devcontainer
フォルダーまたは .devcontainer.json
ファイルを含むフォルダーへのパスを受け入れます。たとえば、devcontainer build --workspace-folder <my_repo>
は my_repo
のコンテナー イメージをビルドします。
イメージのビルドと公開の例
たとえば、複数のプロジェクトやリポジトリで再利用する多数のイメージを事前にビルドしたい場合があります。そのためには、次の手順に従ってください。
-
ソース コード リポジトリを作成します。
-
事前ビルドする各イメージの開発コンテナー構成を作成し、必要に応じてカスタマイズします (開発コンテナー機能を含む)。たとえば、次の
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 spec で確認できます。
フィードバック
dev container CLI と仕様は活発に開発中であり、皆様からのフィードバックをお待ちしております。このイシュー、または devcontainers/cli リポジトリの新しいイシューやプルリクエストを通じてご提供いただけます。
次のステップ
- 開発コンテナー仕様リポジトリ - オープン仕様を読み、貢献してください。
- devcontainer.jsonリファレンス -
devcontainer.json
スキーマを確認します。 - 開発コンテナーを作成する - 作業環境のカスタム コンテナーを作成します。
- 高度なコンテナー - 高度なコンテナーシナリオの解決策を見つけます。