diff --git a/README.md b/README.md
index 13d06866..f3f8be67 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,7 @@
+Voice Changer AI Trainer and Player Container
+----
+
+[MMVC](https://github.com/isletennos/MMVC_Trainer)のトレーニングと実行を簡単にするためのDockerコンテナです。
 
 # 使用方法
 ## 前提
@@ -31,11 +35,22 @@ Sun Sep 15 22:40:52 2019
 ```
 こんな感じの出力が出ればOKです。
 
-ボイスチェンジ時にはGPUは必須ではありません。あればより高速にぼいちぇんできるかもしれません。
+ボイスチェンジ時にはGPUは必須ではありません。あればより高速にボイスチェンジできるかもしれません。
 
 ## トレーニングデータの準備
+### Data作成(自分の声)
+
+[MMVC](https://github.com/isletennos/MMVC_Trainer)のドキュメントに従って、ITAコーパスなどの台本データ(textデータ)を入手し、でwavデータを作成してください。textデータとwavデータは、dataset/00_myvoiceフォルダの下においてください。
+
+wavデータの作成は、こちらの[voice-recorder](https://github.com/w-okada/voice-recorder)アプリケーションを使用しても作成できます。
+wavのサンプリングレートやファイル名など、MMVCに適したデータを作成するように作られているので、いくらか手間が省けるかと思います。
+
+### Data作成(なりたい声)
+[MMVC](https://github.com/isletennos/MMVC_Trainer)のドキュメントに従って、公式サポートされている声データ(.zip形式)を取得してください。データはzip形式のまま、datasetフォルダにおいてください。
+
 
 ### Datasetの中身
+上記Data作成を実施すると、次のようなフォルダ構成になると思います。ご確認ください。
 ```
 $ ls dataset -l
 合計 1656692
@@ -61,10 +76,16 @@ $ EXP_NAME=001_exp
 # テスト用フォルダ作成
 $ sh template.sh $EXP_NAME
 
-$ docker run -it --gpus all --shm-size=2g \
+
+docker run -v .:/go/src/app:ro [container id]
+USER_ID=$(id -u)
+GROUP_ID=$(id -g)
+$ USER_ID=$(id -u) docker run -it --gpus all --shm-size=2g \
   -v `pwd`/exp/${EXP_NAME}/dataset:/MMVC_Trainer/dataset \
   -v `pwd`/exp/${EXP_NAME}/logs:/MMVC_Trainer/logs \
   -v `pwd`/exp/${EXP_NAME}/filelists:/MMVC_Trainer/filelists \
+  -e LOCAL_UID=$(id -u $USER) \
+  -e LOCAL_GID=$(id -g $USER) \
   -p 6008:6006  mmvc_trainer_docker
 ```
 
diff --git a/start.sh b/start.sh
new file mode 100644
index 00000000..cff66724
--- /dev/null
+++ b/start.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+EXP_NAME=$1
+shift 
+
+docker run -it --gpus all --shm-size=2g \
+  -v `pwd`/exp/${EXP_NAME}/dataset:/MMVC_Trainer/dataset \
+  -v `pwd`/exp/${EXP_NAME}/logs:/MMVC_Trainer/logs \
+  -v `pwd`/exp/${EXP_NAME}/filelists:/MMVC_Trainer/filelists \
+  -v `pwd`/exp/${EXP_NAME}/filelists:/voice-changer-internal/voice-change-service/filelists   
+  -e LOCAL_UID=$(id -u $USER) \
+  -e LOCAL_GID=$(id -g $USER) \
+  -p 6008:6006  mmvc_trainer_docker "$@"
\ No newline at end of file
diff --git a/template.sh b/template.sh
index 911cf4b4..d1f5aea2 100644
--- a/template.sh
+++ b/template.sh
@@ -1,6 +1,5 @@
 #!/bin/bash
 
-## 005_expより複数話者対応。myvoiceのフォルダ階層を一つ深くする。
 EXP_NAME=$1
 
 echo $EXP_NAME
diff --git a/trainer/Dockerfile b/trainer/Dockerfile
index 3ae5fda7..4d1a980e 100644
--- a/trainer/Dockerfile
+++ b/trainer/Dockerfile
@@ -36,7 +36,7 @@ RUN cythonize -3 -i core.pyx \
 
 FROM debian:bullseye-slim
 RUN apt-get update \
-        && apt-get install -y python3-pip espeak\
+        && apt-get install -y python3-pip espeak gosu\
         && apt-get clean \
         && rm -rf /var/lib/apt/lists/*
 
@@ -46,11 +46,20 @@ COPY --from=base /MMVC_Trainer /MMVC_Trainer
 COPY fine_model/G_180000.pth /MMVC_Trainer/fine_model/G_180000.pth
 COPY fine_model/D_180000.pth /MMVC_Trainer/fine_model/D_180000.pth
 
+# RUN groupadd -g 61000 docker
+# RUN useradd -g 61000 -l -m -s /bin/false -u 61000 docker
+# USER docker
+
 WORKDIR /MMVC_Trainer
 ADD /setup.sh  /MMVC_Trainer/
+ADD /exec.sh  /MMVC_Trainer/
+RUN chmod 0777 . -R
+# RUN chmod 0777 exec.sh
+# RUN chmod 0666 train_ms.py
+RUN chmod 0777 /usr/local/lib/python3.9/dist-packages/pyopenjtalk
 
-# ENTRYPOINT ["/bin/bash", "setup.sh"]
-# CMD [ "8", "false"]
+ENTRYPOINT ["/bin/bash", "setup.sh"]
+CMD [ "-h"]
 
 # FROM ubuntu:focal-20220531 as base
 
diff --git a/trainer/exec.sh b/trainer/exec.sh
new file mode 100644
index 00000000..7bd03fbd
--- /dev/null
+++ b/trainer/exec.sh
@@ -0,0 +1,122 @@
+#!/bin/bash
+
+# 参考:https://programwiz.org/2022/03/22/how-to-write-shell-script-for-option-parsing/
+
+set -eu
+
+echo "------"
+echo "$@"
+echo "------"
+
+usage() {
+    echo "
+usage: 
+    For training
+        $0 [-t] [-b batch_size] [-r] 
+            -t: flag for training mode
+            -b: batch_size.
+            -r: flag for resuming training.
+    For changing voice
+        $0 [-v] [-c config] [-m model]
+            -v: flag for voice change mode
+            -c: config
+            -m: model name
+    For help
+        $0 [-h]
+            -h: show this help
+" >&2
+}
+warn () {
+    echo "! ! ! $1 ! ! !"
+    exit 1
+}
+
+
+training_flag=false
+batch_size=10
+resume_flag=false
+
+voice_change_flag=false
+config=
+model=
+
+# オプション解析
+while getopts tb:rvc:m:h OPT; do
+    case $OPT in
+    t) 
+        training_flag=true
+        ;;
+    b) 
+        batch_size="$OPTARG"
+        ;;
+    r) 
+        resume_flag=true
+        ;;
+    v) 
+        voice_change_flag=true
+        ;;
+    c) 
+        config="$OPTARG"
+        ;;
+    m) 
+        model="$OPTARG"
+        ;;
+    h | \?) 
+        usage && exit 1
+        ;;
+        
+    esac
+done
+
+
+## コマンドライン引数から、オプション引数分を削除
+# shift $((OPTIND - 1))
+
+# モード解析
+if $training_flag && $voice_change_flag; then
+    warn "-t(トレーニングモード) と -v(ボイチェンモード)は同時に指定できません。"
+    exit 1
+elif $training_flag; then
+    echo "■■■  ト レ ー ニ ン グ モ ー ド   ■■■"
+elif $voice_change_flag; then
+    echo "■■■  ボ イ チ ェ ン モ ー ド  ■■■"
+else
+    warn "-t(トレーニングモード) と -v(ボイチェンモード)のいずれかを指定してください。"
+    exit 1
+fi
+
+
+
+if $training_flag; then
+
+
+    python3 create_dataset_jtalk.py -f train_config -s 24000 -m dataset/multi_speaker_correspondence.txt
+    # date_tag=`date +%Y%m%d%H%M%S`
+    sed -ie 's/80000/8000/' train_ms.py
+    sed -ie "s/\"batch_size\": 10/\"batch_size\": $batch_size/" configs/train_config.json
+
+    python3 -m tensorboard.main --logdir logs --port 6006 --host 0.0.0.0 &
+
+    if ${resume_flag}; then
+        echo "トレーニング再開。バッチサイズ: ${batch_size}。"
+        python3 train_ms.py -c configs/train_config.json -m vc
+    else
+        echo "トレーニング開始。バッチサイズ: ${batch_size}。"
+        python3 train_ms.py -c configs/train_config.json -m vc -fg fine_model/G_180000.pth -fd fine_model/D_180000.pth
+    fi
+fi
+
+# if $voice_change_flag; then
+#     if [[ -z "$config" ]]; then
+#         warn "コンフィグファイル(-c)を指定してください"
+#     fi
+#     if [[ -z "$model" ]]; then
+#         warn "モデルファイル(-m)を指定してください"
+#     fi
+
+#     cp -r /resources/* .
+#     if [[ -e ./setting.json ]]; then
+#         cp ./setting.json ../frontend/dist/assets/setting.json
+#     fi
+#     python3 serverSIO.py 8080 $config $model
+# fi
diff --git a/trainer/setup.sh b/trainer/setup.sh
index f573e0f1..4e869938 100644
--- a/trainer/setup.sh
+++ b/trainer/setup.sh
@@ -1,20 +1,18 @@
 #!/bin/bash
 
-BATCH_SIZE=$1
-RESUME=$2
-echo batch:${BATCH_SIZE}
-echo resume:${RESUME}
+# 参考:https://programwiz.org/2022/03/22/how-to-write-shell-script-for-option-parsing/
 
-python3 create_dataset_jtalk.py -f train_config -s 24000 -m dataset/multi_speaker_correspondence.txt
+set -eu
 
-sed -ie 's/80000/8000/' train_ms.py
-sed -ie "s/\"batch_size\": 10/\"batch_size\": $BATCH_SIZE/" configs/train_config.json
+# 実行ユーザ作成
+USER_ID=${LOCAL_UID:-9001}
+GROUP_ID=${LOCAL_GID:-9001}
 
+echo ""
+echo "アプリケーション開始... (内部ユーザー [UID : $USER_ID, GID: $GROUP_ID])"
+useradd -u $USER_ID -o -m user
+groupmod -g $GROUP_ID user
 
-# cd monotonic_align/ \
-#  && cythonize -3 -i core.pyx \
-#  && mv core.cpython-39-x86_64-linux-gnu.so monotonic_align/ \
-#  && cd -
-
-python3 -m tensorboard.main --logdir logs --port 6006 --host 0.0.0.0 &
-python3 train_ms.py -c configs/train_config.json -m 20220306_24000 -fg fine_model/G_180000.pth -fd fine_model/D_180000.pth
\ No newline at end of file
+#su user
+echo "parameter: $@"
+exec /usr/sbin/gosu user /bin/bash exec.sh "$@"