Dev Containers FAQ
この記事には、Dev Containers 拡張機能をさまざまな環境でセットアップして使用するための一般的な質問がいくつかまとめられています。
「Dev Container 定義」はアプリケーションのデプロイ方法を定義するものですか?
いいえ。開発コンテナは、デプロイの準備が整う前にアプリケーションを開発するための環境を定義するものです。デプロイ用コンテナと開発用コンテナは似ているかもしれませんが、開発中に使用するツールをデプロイ用イメージに含める必要はないでしょう。
devcontainers/templates リポジトリには、一般的な開発環境向けの Dev Container 定義セットが含まれています。別のコンテナビルドやデプロイワークフローを使用したい場合は、Dev Container 定義をセットアップせずに実行中のコンテナにアタッチすることも可能です。
「Dev Container 定義」は、Buildpacks のようにアプリケーションのビルド方法を定義するものですか?
いいえ。Buildpacks の概念は、ソースコードから一連の定義されたステップを経てデプロイ可能なコンテナイメージを生成することに焦点を当てています。Dev Container は、ビルドの準備ができる前にアプリケーションを開発できる環境です。したがって、これらは補完的な概念です。
ローカルのファイルシステムをコンテナにマウントしようとするとエラーが発生します
Docker のタスクバーアイコンを右クリックしてください。Windows の場合は、[Settings] メニューから [Resources] > [File Sharing] を選択し、ソースコードがあるドライブにチェックを入れてください。macOS の場合は、[Preferences] メニューから [Resources] > [File Sharing] を選択し、ソースコードを含むフォルダーがリストに指定されたファイルパス内にあることを確認してください。
Docker for Windows の一般的な問題の回避策については、Docker Desktop for Windows のヒントを参照してください。
ライブラリや依存関係が見つからないというエラーが表示されます
特定の Docker イメージに含まれていないライブラリに依存している拡張機能もあります。たとえば、Visual Studio Live Share はシステムレベルの依存関係のインストールを必要とし、それらはドキュメントに記載されています。これらの依存関係の必要性は、Docker イメージで使用されるオペレーティングシステム(特定の Linux ディストリビューションなど)によって異なります。Dockerfile に必要なコマンドを追加して、Docker のビルドプロセス中にこれらの依存関係をインストールする必要があるかもしれません。特定の拡張機能のドキュメントを検索して依存関係を確認し、問題を解決する方法については追加のソフトウェアのインストールを参照してください。
一度に複数のコンテナに接続できますか?
現時点では、1つの VS Code ウィンドウで接続できるコンテナは1つだけですが、新しいウィンドウを開いて実行中のコンテナにアタッチしたり、複数の devcontainer.json ファイルと共通の Docker Compose ファイルを使用してプロセスを自動化したりすることができます。
リモートホスト上のコンテナで作業できますか?
はい。詳細については、リモート SSH ホスト上のフォルダーをコンテナ内で開く、または Remote Tunnels ホスト上のフォルダーをコンテナ内で開くのセクションを参照してください。
コンテナ内で作業中に、ローカルの Docker や Kubernetes インストールに対してコンテナイメージをビルドしたりデプロイしたりするにはどうすればよいですか?
Docker ソケットを転送し、コンテナ内に Docker CLI(Kubernetes の場合は kubectl)をインストールすることで、イメージのビルドやコンテナのデプロイが可能です。詳細については、Docker outside of Docker、Docker outside of Docker Compose、および Kubernetes-Helm の Dev Container 定義を参照してください。
コンテナ内で実行されている VS Code Server にはどのような接続要件がありますか?
VS Code Server をインストールするには、ローカルマシンから以下の宛先へのアウトバウンド HTTPS(ポート 443)接続が必要です。
update.code.visualstudio.comvscode.download.prss.microsoft.com
Dev Containers 拡張機能は、VS Code Server をローカルにダウンロードし、接続後にコンテナへコピーします。
Extensions: Install from VSIX... コマンドを使用して、インターネット接続なしで手動で拡張機能をインストールすることもできますが、拡張機能パネルや devcontainer.json を使用してインストールする場合は、ローカルマシンと VS Code Server から以下の宛先へのアウトバウンド HTTPS(ポート 443)アクセスが必要になります。
marketplace.visualstudio.com*.gallerycdn.vsassets.io(Azure CDN)
最後に、一部の拡張機能 (C# など) は download.microsoft.com または download.visualstudio.microsoft.com からセカンダリ依存関係をダウンロードします。その他の拡張機能 (たとえば、Visual Studio Live Share) には、追加の接続要件がある場合があります。問題が発生した場合は、拡張機能のドキュメントを参照してください。
VS Code Server はコンテナ内のランダムなポートで実行され、VS Code 自体は Docker の構成済み通信チャネルを通じて通信するために docker exec を使用します。
拡張機能の開発者として、自分の拡張機能が確実に動作するようにするには何をする必要がありますか?
VS Code 拡張機能 API は、リモート実行の詳細のほとんどを隠蔽しているため、多くの拡張機能は変更なしでそのまま Dev Container 内で動作します。ただし、すべての機能が期待どおりに動作することを確認するために、Dev Container 内で拡張機能をテストすることをお勧めします。詳細については、リモート開発のサポートに関する記事を参照してください。
質問の回答を探すために、他にどのようなリソースがありますか?
以下の記事が質問の回答に役立つ可能性があります。
- 高度なコンテナ構成 または ヒントとコツ
- Dockerfile リファレンス
- Docker Compose ファイルリファレンス
- Docker Desktop for Windows トラブルシューティングガイド および FAQ
- Docker Desktop for Mac トラブルシューティングガイド および FAQ
VS Code 以外で Dev Containers を使用できますか?
本番ワークロードのコンテナ化が一般的になるにつれ、Dev Container は VS Code 以外でも有用なものとなっています。私たちは、誰もがどのツールからでも一貫した開発環境を構成できるように、Development Container Specification(開発コンテナ仕様)を作成しています。これは、簡素化されたオーケストレーション不要の単一コンテナオプションを提供しつつ、既存のフォーマットに開発特有の設定、ツール、構成を追加する方法を模索するものです。これにより、コーディング環境として、あるいは継続的インテグレーションやテストのために利用できるようになります。
詳細および仕様の確認は containers.dev をご覧ください。また、活発な提案の確認や仕様への貢献については、GitHub の devcontainers/spec リポジトリをご覧ください。