docker run のシェルスクリプトを他人の環境でも動くようにする
ディレクトリのマウントの記述の改善に関するメモです。
前提
docker環境で、host環境のディレクトリをguest環境にマウントすることがある。
docker run
のoptionで
-v /home/someone/folder/datasets:/root/project/datasets \
などと記述する。
機械学習系のモデルファイル・機械学習の学習用データ・推論用データはディスクスペースを大量消費するのでDockerfile 中で COPYをすることは避けます。
課題
/home/someone/folder/datasets
という記述は、
そのリポジトリをgit clone した人にとっては違ってくる。
そのため、事前にdocker runを実行するシェルスクリプトを事前に編集してもらう必要を生じる
そのような必要のないシェルスクリプトを記載したい。
host環境のディレクトリを絶対pathで指定することを避けたい。
対策
以下のようにすることで、シェルスクリプト中でhost環境のディレクトリを絶対pathを書くことをなくせる。
#!/bin/bash
export GIT_ROOT=$(cd $(dirname $0)/.. ; pwd)
sudo docker run -it --rm --net=host --runtime nvidia -e DISPLAY=$DISPLAY \
-v ${GIT_ROOT}/repo_name/weights:/root/repo_name/weights \
--device /dev/bus/usb \
--device /dev/video0:/dev/video0:mwr \
-v /tmp/.X11-unix/:/tmp/.X11-unix repo_tag:100
効果
docker runを実行するスクリプトを事前に編集してくださいという作業なしに
そのスクリプトを実行できるようになった。