第21回 Dockerで3Dゲームを動かす――構築編古賀政純の「攻めのITのためのDocker塾」(2/3 ページ)

» 2016年04月27日 08時00分 公開

Dockerコンテナからゲームコントローラーを使って操作する

 次に疑問2ですが、これは連載第17回18回19回でご紹介したUSB接続のWebカメラと同様だと思われるかもしれません。しかし今回の場合は、Webカメラではなく、ゲームコントローラー(ゲームパッド)ですので、指定するデバイス名がWebカメラと異なります。一般的に、ホストOSがCentOS 7.xの場合、そのホストOSが稼働する物理サーバに接続されたゲームコントローラー(ゲームパッド)は、/dev/inputディレクトリ配下のデバイスファイルで認識されます。したがって、ホストOSのデバイスをDockerコンテナから利用するには、以下のようにホストOSのゲームコントローラーのデバイスのディレクトリをコンテナと共有します。


# docker run \
...
--device=/dev/input:/dev/input \ ←ゲームコントローラーのデバイスを共有
...
ubuntu:mygame01 /bin/bash

 ただし、ゲームアプリ側で/dev/inputディレクトリ以下のデバイスを取り扱えることが前提であり、ゲームアプリによっては、認識が一切できない場合や、コントローラーの動作の一部が実現できない場合もありますので、環境によって動作可否が異なります。

Dockerコンテナから音を出す

 疑問3についてですが、ホストOSが稼働する物理マシンに搭載されたサウンドカードをDockerコンテナから利用するには、ホストOSの/dev/sndをコンテナと共有します。もちろんホストOS側で、/dev/sndディレクトリ配下に存在するデバイスファイル経由で、ホストOSに搭載されたサウンドカードに接続されたスピーカーから音が鳴ることが前提条件です。Dockerコンテナの起動時のオプションとしては、ゲームコントローラーの場合と同様に、「--device」オプションを使って、サウンドデバイスをホストOSとコンテナで共有します。


# docker run \
...
--device=/dev/snd:/dev/snd \ ←サウンドデバイスのディレクトリを共有
...
ubuntu:mygame01 /bin/bash

 DockerコンテナからホストOSが稼働する物理マシンに接続されたサウンドカード経由で音を鳴らす以外にも、Pulseaudio(パルスオーディオ)をよばれるソフトウェアを使うと、遠隔にある物理マシンのサウンドカードで音を鳴らすことも可能です。Pulseaudioを使って、Dockerコンテナから遠隔にある物理マシンのサウンドカードで音を鳴らす方法、システム構成例、具体的な設定方法は、書籍「Docker実践ガイド」に掲載しています。

Docker実践ガイド

 最後に疑問4について、これは連載第17回18回19回でご紹介した「ボリュームの共有」で実現できます。今回は、Dockerコンテナを起動するユーザーのホームディレクトリに生成されるゲームアプリごとの隠しディレクトリを共有することによって、前回起動したゲームアプリの状態を保持します。例えば、ドライブシミュレータのゲームアプリ「Vdrift」の場合は、以下のように隠しディレクトリ「$HOME/.vdrift」をホストOSとコンテナで共有します。これにより、Dockerコンテナ上の「$HOME/.vdrift」ディレクトリに生成されたゲームアプリの各種データは、ホストOS上の「$HOME/.vdrift」ディレクトリに保存されます。


# docker run \
...
-v $HOME/.vdrift:$HOME/.vdrift \
...
ubuntu:mygame01 /bin/bash

ボリューム共有により、セーブデータをホストOSに保管するアイデア

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ