LoginSignup
0
0

More than 1 year has passed since last update.

WindowsでDockerToolBoxを立ち上げる際の前後に独自の処理を入れる

Last updated at Posted at 2021-03-28

「Docker Toolbox」は「C:\Program Files\Docker Toolbox\start.sh」を実行しています。 この「C:\Program Files\Docker Toolbox\start.sh」を変更しなくても実行する前後に独自の処理を行うことは可能です。

■環境変数(私が使用しているものに限定)

  • Dockerの環境変数(DockerToolbox限定も含まれます)
環境変数 内容 サンプル(カッコ内はデフォルト値)
COMPOSE_FILE docker-composeの設定ファイル名 docker-compose.local.yml(docker-compose.yml)
DOCKER_MACHINE_NAME docker環境を操作する際の名前 test(default)
PROXY_ENV 環境を生成する際に使用される引数(ここにいろいろ設定できます) ""(default)
  • VirtualBoxの環境変数
環境変数 内容 サンプル
MACHINE_STORAGE_PATH VirtualBoxのイメージ保存場所 D:\VirtualBox VMs

■前後の処理をカスタマイズ

start.bat
REM カスタマイズした開始バッチファイル
"C:\Program Files\Git\bin\bash.exe" --login -i "C:\start.sh"
start.sh
# Docker Toolboxの実行前に実行させるスクリプト「C:\start.sh」

##### 
##### Docker Toolboxの前の処理を記述
##### 

sh "C:\Program Files\Docker Toolbox\start.sh" "C:\end.sh"
end.sh
# Docker Toolboxの実行後に実行させるスクリプト「C:\end.sh」

##### 
##### Docker Toolboxの後の処理を記述
##### 

exec "$BASH" --login -i

■docker構築後にVirtualBoxの設定を変更する

※各仮想環境の設定を自動化したい場合、上記でいう所の「C:\end.sh」で変更します

end.sh
docker-machine stop $DOCKER_MACHINE_NAME

### VirtualBoxの設定を変更
# windows終了時に仮想マシンの電源をOFFにする
#VBoxManage setextradata $DOCKER_MACHINE_NAME GUI/DefaultCloseAction 3
# 共有フォルダを削除する
#VBoxManage sharedfolder remove $DOCKER_MACHINE_NAME --name "[共有フォルダ名]"
# 共有フォルダをマウントする
#VBoxManage sharedfolder add $DOCKER_MACHINE_NAME --name "[共有フォルダ名]" --hostpath "[共有フォルダにするパス]" --automount
# 共有フォルダ上にsymbolを作成できるようにする
#VBoxManage setextradata $DOCKER_MACHINE_NAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/[共有フォルダ名] 1

docker-machine start $DOCKER_MACHINE_NAME

■VirtualBox上に複数のdocker環境がある場合の環境を切り替える

docker-machine regenerate-certs -f $DOCKER_MACHINE_NAME
eval "$(docker-machine env ${DOCKER_MACHINE_NAME})"

■Windows Home限定の必須設定

windows home では不具合があり、docker toolboxの最新版をインストールすると「Hyper-V」のエラーが表示されます。 これを回避する方法として「PROXY_ENV」の環境変数が利用できます。

※実行時のスクリプトで下記のような処理を入れると回避できます

# windowsの情報からOS名のみ抽出する
# 英語表示の場合『OS.Name』
OS_NAME=$(systeminfo | findstr "^OS.名" | cut -d ':' -f 2)
# pro/homeを取得
OS_EDITION=$(echo ${OS_NAME} | sed 's/.\+\s\(.\+\)/\1/')
OS_EDITION=${OS_EDITION,,}

if [ ${OS_EDITION} = "home" ]; then
  # home の場合、docker toolboxの不具合回避
  export PROXY_ENV="$PROXY_ENV --virtualbox-no-vtx-check"
fi
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0