Docker環境内でUnityを動かす方法を紹介します。
UnityのDocker環境を構築する
Unityを触りたくなったので、そのための環境を構築していきます。ローカルにいろいろインストールして汚したくないので、Docker環境内で完結するようにしていきます。
目次
手順
1:Unity IDの作成
Unityホームページでアカウントを作成します。もちろん無料で作成できます。
2:Dockerのインストール
PCにGPUが搭載されている場合は、Dockerコンテナ内でもGPUを使えるようにするため、以下3つをインストールします。GPUを使用しない場合は、DockerのみでOKです。
- Docker
- Nvidia Driver
- Nvidia Container Runtime
インストール方法の詳細は、以下の記事にまとめています。
3:Dockerfileの実装
########## Pull ########## FROM nvidia/opengl:base-ubuntu20.04 ########## User ########## ARG home_dir="/home/user" COPY copy/entrypoint.sh /usr/local/bin/entrypoint.sh RUN apt-get update && \ apt-get install -y \ gosu \ sudo && \ chmod +x /usr/local/bin/entrypoint.sh && \ mkdir -p $home_dir ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] ########## Non-interactive ########## ENV DEBIAN_FRONTEND=noninteractive ########## Unity ########## ## Hub RUN apt-get update && \ apt-get install -y \ wget \ gnupg gnupg2 && \ wget -qO - https://hub.unity3d.com/linux/keys/public | gpg --dearmor | tee /usr/share/keyrings/Unity_Technologies_ApS.gpg > /dev/null && \ sh -c 'echo "deb [signed-by=/usr/share/keyrings/Unity_Technologies_ApS.gpg] https://hub.unity3d.com/linux/repos/deb stable main" > /etc/apt/sources.list.d/unityhub.list' && \ apt-get update && \ apt-get install -y \ unityhub \ libgbm-dev \ firefox ## Editor ARG editor_version=2022.3.8f1 RUN apt-get update && \ apt-get install -y xvfb && \ sed -i 's/^\(.*DISPLAY=:.*XAUTHORITY=.*\)\( "\$@" \)2>&1$/\1\2/' /usr/bin/xvfb-run && \ echo '#!/bin/bash\nxvfb-run -a /opt/unityhub/unityhub-bin --no-sandbox --headless "$@" 2>/dev/null' > /usr/bin/unityhub-root && \ chmod +x /usr/bin/unityhub-root && \ mkdir -p $home_dir/Unity/Hub/Editor && \ unityhub-root install-path --set "$home_dir/Unity/Hub/Editor" && \ unityhub-root install --version $editor_version
## Requirements RUN apt-get update && \ apt-get install -y \ libglu1 \ libgconf-2-4 ########## Initial Position ########## WORKDIR $home_dir CMD ["bash"]
./copy/entrypoint.shは以下のとおりです。
#!/bin/bash user_name=user user_pw=$user_name user_id=${local_uid:-9001} group_id=${local_gid:-9001} useradd -u $user_id -o -m -G sudo $user_name groupmod -g $group_id $user_name echo $user_name:$user_pw | chpasswd echo "$user_name ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers chown -R $user_name /home/$user_name exec /usr/sbin/gosu $user_name "$@"
補足
FROM nvidia/opengl:base-ubuntu20.04
GPUを使って描画したいため、OpenGLのイメージをベースにしています。RUN apt-get update && \ apt-get install -y xvfb && \ sed -i 's/^\(.*DISPLAY=:.*XAUTHORITY=.*\)\( "\$@" \)2>&1$/\1\2/' /usr/bin/xvfb-run && \ echo '#!/bin/bash\nxvfb-run -a /opt/unityhub/unityhub-bin --no-sandbox --headless "$@" 2>/dev/null' > /usr/bin/unityhub-root && \ chmod +x /usr/bin/unityhub-root && \ mkdir -p $home_dir/Unity/Hub/Editor && \ unityhub-root install-path --set "$home_dir/Unity/Hub/Editor" && \ unityhub-root install --version $editor_version
「なぜこんな複雑な記述をしているのだ?」と思われた方々は以下を辿ってみてください。ちなみに、この記述はunityci/hubのDockerfileを参考にしています。- 試しに以下のようにシンプルに書いてみると、、、
RUN mkdir -p $home_dir/Unity/Hub/Editor && \ unityhub install-path --set "$home_dir/Unity/Hub/Editor" && \ unityhub install --version $editor_version
「--no-sandboxをつけろ」となってビルドできません。[0826/021245.865512:FATAL:electron_main_delegate.cc(293)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180. Trace/breakpoint trap (core dumped)
- 言われたとおり--no-sandboxをつけてみると、、、
RUN mkdir -p $home_dir/Unity/Hub/Editor && \ unityhub install-path --set "$home_dir/Unity/Hub/Editor" --no-sandbox && \ unityhub install --version $editor_version --no-sandbox
次は「ディスプレイがない」と怒られます。[8:0826/022604.670759:ERROR:ozone_platform_x11.cc(239)] Missing X server or $DISPLAY [8:0826/022604.670794:ERROR:env.cc(255)] The platform failed to initialize. Exiting. The futex facility returned an unexpected error code. Aborted (core dumped)
- 試しに以下のようにシンプルに書いてみると、、、
4:Dockerイメージのビルド
docker build . -t unity_editor:2022_3_7f1
5:Dockerコンテナの起動
xhost + docker run \ -it \ --rm \ -e local_uid=$(id -u $USER) \ -e local_gid=$(id -g $USER) \ -e "DISPLAY" \ -v "/tmp/.X11-unix:/tmp/.X11-unix:rw" \ --privileged \ --gpus all \ unity_editor:2022_3_7f1
GPUを使用しない場合は「--gpus all」の行を削除してください。
6:Unityの起動
起動したDockerコンテナ内で、以下のコマンドを実行するとUnity Hubが起動します。
unityhub
Unity Hubの「Sign in」をクリックすると、Firefoxがポップアップして、サインインが求められます。手順1で作成したアカウントのとおり入力すると、Unity Hubへ戻ります。
あとは自由にプロジェクトを作成したりしてみてください。
補足
Unity Hubにサインインする前に、以下のコマンドでEditorを起動しようとすると、「No valid Unity Editor license found. Please activate your license.」とエラーになってしまいます。
~/Unity/Hub/Editor/2022.3.7f1/Editor/Unity
さいごに
環境構築、お疲れさまでした。参考になれば幸いです。
Ad.
コメント