Windows コンテナの中では、工夫すれば DirectX を用いたアプリケーションを動かすことが可能です。以前に、Docker Desktop を使用し Windows コンテナに切り替えて動作を確認したときには、スワップチェインまで生成できていました。
Docker Desktop を抜いた後でも、同様のことができるかを確認してみましたが、問題なくできます。
以前はスワップチェインが作れるかどうかを確認していたのですが、1つ曖昧だったので今度はデバイス名を出すようにして、挙動を確認してみました。
グラフィックスデバイスを未設定
デバイスを設定せずに、Windows コンテナでスワップチェインを作り、そのときのデバイス名を表示させてみました。
デバイスを設定しない場合には、標準のレンダラーが使われるようで GPU の機能を活かした描画はできなさそうです。いわゆる WARP デバイス (Windows Advanced Rasterization Platform) で、CPU が頑張って描画を行う状態です。
グラフィックスデバイスを設定する
docker コマンドで、グラフィックスデバイスを設定し、分離プロセスとして Windows コンテナを起動するようにすると、 Windows コンテナの中でもホストに装着されている GPU を認識できました。この設定で起動するには、 –isolation process オプションで分離プロセスと指定し、–device class/5B45201D-F2F2-4F3B-85BB-30FF1F953599 でグラフィックスデバイスを指定します。
コマンド例は以下の通りです(一部パラメータを省略しています。)
docker run -it --isolation process --device class/5B45201D-F2F2-4F3B-85BB-30FF1F953599 --rm mcr.microsoft.com/windows:20H2-amd64 powershell
しかし、動作させたアプリのウィンドウが目に見えるわけでもなく、キーボード・マウスでの操作もできないので、活用できる用途としては機械学習などの計算メインというところでしょうか。