一番直感的な操作はVSCではRemote-SSHでリモートサーバーに接続し、その上でRemote-Containerを利用することだが、現状のVSCでは実装されていない。VSCのドキュメントに替わりの方法として大まかに三通りの入り口が載っていたが、自分には最後の方法が一番使いやすそう。
1. Remote-SSHを用いる
VSCのDocumentで第一に記載されている方法だが、
The Docker extension supports debugging .NET Core-based and Node.js-based services running inside a container. Other programming languages are not supported at this time.
とのことで、__.NET Core-basedの言語か、Node.jsでしか使えない__よう。
#2. docker contextで切り替える
ssh-agentを設定した上で、SSH tunnelingを用いてremote Docker engineを指定したdocker contextを作成し、適宜切り替える。この場合、dockerコマンド自体のcontextが切り替わるので、ローカルマシン上のDocker engineを使用しようとすると毎度切り換えないといけない。
そのまま"Open folders in Containers"を実行すると、ローカルフォルダをマウントしようとしてエラーになる。Remote ExplorerやDocker extentionタブからすでに作成されているコンテナを選択し、Attach to containerでコンテナに入るのが良いか。
#3. docker.hostを利用する
https://code.visualstudio.com/docs/remote/containers-advanced#_converting-an-existing-or-predefined-devcontainerjson
ssh-agentの設定は2と同様に行い、settings.json内のdocker.hostを設定する。これはDOCKER_HOSTでdocker contextをオーバーライドするのと恐らく等価。空のフォルダを作ってワークスペース設定として設定すれば、ローカル/リモートなど__複数のDocker engineを同時に利用できる__。これは2.の方法にはない利点。
またこの方法では、ローカルマシンに"devcontainer.json"を作成することでローカルなDockerfileからコンテナ作成や、リモートマシン上のフォルダのマウントなどを設定することができる。