コンテナーから Docker または Kubernetes を使用する
開発コンテナー内でアプリケーションをビルド、デプロイ、デバッグできますが、本番環境に近いコンテナーセット内で実行してテストする必要がある場合もあります。幸いなことに、必要な Docker または Kubernetes CLI をインストールし、ローカルの Docker ソケットをマウントすることで、開発コンテナー内からアプリケーションのコンテナーイメージをビルドおよびデプロイできます。
必要な CLI が配置されたら、コンテナーツール拡張機能またはKubernetes拡張機能を使用して、適切なコンテナークラスターと連携することもできます。
特定のシナリオに関する追加情報については、以下の開発コンテナーテンプレートの例を参照してください。プロジェクトに追加するには、VS Code で作業したいフォルダーを開き、コマンドパレット (F1) でDev Containers: Add Dev Container Configuration Files...コマンドを実行します。
VS Code UI から、フォルダーの内容に基づいて並べ替えられた、フィルター可能なリストで、ファーストパーティおよびコミュニティインデックスから事前に定義されたコンテナー構成を選択するように求められます。以下のセクションで説明されているテンプレートのいずれかを選択できます。
開発コンテナーで Docker または Minikube を実行する
- 
Docker-in-Docker - Docker (または Moby) を完全にコンテナー内で実行する方法を示します。開発コンテナー内のすべてのフォルダーをバインドマウントするサポートを提供しますが、ローカルマシンのキャッシュを再利用することはできません。 
- 
Kubernetes - Minikube-in-Docker - Docker-in-Docker と同様の利点と制限で、Minikube を完全にコンテナー内で実行する方法を示します。 
コンテナーから既存の Docker または Minikube インスタンスにアクセスする
- 
Docker outside of Docker - 開発コンテナー内で Docker (または Moby) CLI を使用して、Docker Unix ソケットをバインドマウントすることでホストの Docker デーモンに接続する方法を示します。オーバーヘッドが低く、マシンのキャッシュを再利用できますが、バインドマウントの制限があります。 
- 
Docker outside of Docker Compose - 単一の Dockerfile の代わりに Docker Compose を使用している場合の Docker outside of Docker のバリエーション。 
- 
Kubernetes - ローカル構成 - Docker outside of Docker モデルを採用し、kubectl と Helm を追加して、ローカルの Minikube または Docker が提供する Kubernetes クラスターにアクセスする方法を示します。 
また、上記のサンプルで参照されている、再利用可能なDocker-in-Docker、Docker outside of Docker、およびKubernetesのインストールスクリプトに関するドキュメントもあります。
コンテナー内から Docker でホストボリュームをマウントする
Docker-in-Dockerモデルに従うと、開発コンテナー内から Docker CLI を使用すると、同じ場所で実行されている Docker デーモンと対話することになります。これは、開発コンテナー内の任意のものを、作成する「内部」コンテナーに「バインド」マウントできることを意味します。
たとえば、これは「ただ動作する」でしょう
docker run -v /workspace/examplefile.txt:/incontainer/path debian
ただし、この内部コンテナーに利用可能なホストフォルダーをバインドマウントしたい場合は、まず開発コンテナーにマウントする必要があります。
Docker outside of Dockerでは、デフォルトで機能するバインドマウントのタイプが逆になります。ここでは、コンテナー内の Docker CLI がホストの Docker デーモンと対話します。これは、コンテナー内のパスがホスト上のディレクトリのパスと一致しない可能性があるため、コンテナー内からディレクトリをマウントすることに影響します。
ホスト上のパス(コンテナーの外側)が/workspace/...ではないため、上記の例は失敗します。さらに、一部のフォルダーはコンテナー内にのみ存在するため、マウントできません。これを行う必要がある場合は、Docker-in-Docker モデルの方がニーズに合っているかもしれません。
コンテナーでフォルダーを開いている場合、ワークスペースフォルダーをマウントできるように、ホストディレクトリを環境変数としてコンテナーに渡すことができます。(ただし、ボリュームを使用した場合はこれは機能しません。その場合は Docker-in-Docker が最適な選択です。)そのためには、devcontainer.jsonに以下を追加します。
  "remoteEnv": {
    // Pass in the host directory for Docker mount commands from inside the container
    "HOST_PROJECT_PATH": "${localWorkspaceFolder}"
  }
以下の例はmakefileからのもので、開発コンテナーから新しい Docker コンテナーにKUBECONFIGファイルをマウントしています。
docker run -p 8089:8089 -p 9090:9090 -v $(shell echo ${KUBECONFIG} | sed s#/workspace#${HOST_PROJECT_PATH}#):/kubeconfig.json -e KUBECONFIG=/kubeconfig.json ${IMG} -f behaviours/run_submit_locust.py