開発中のアプリの動作確認でデータベースを頻繁に更新するため、docker-composeでmysqlのコンテナを作っては壊ししています。
手軽にデータベースを初期状態に戻せて便利なのですが、使っているとホストのディスク容量をあっという間に占領します。
データベース初期化のついでにディスクスペースも空けるようにシェルスクリプト化してしまいました。
前提・参考ページ
OS: CentOS Linux release 7.2.1511 (Core)
Docker: Docker version 1.13.1, build 8633870/1.13.1
コチラの投稿をお手本丸パクリして、docker-composeからmysqlコンテナを立ち上げています。
Dockerがディスクスペースを圧迫した時の対処法は、コチラの投稿で知りました。
使用するコード
やっていることは
・コンテナの破棄・作成
・docker関連のファイル削除
くらいです
conductor.sh
#!/bin/bash
######################################################
# 環境を初期化します。
# ・DBの初期化
#####################################################
echo "::Started::"
SPACE_S=`df -h | grep '/dev/mapper/centos-root' | awk '{print $5}' | awk -F'%' '{print $1}'`
if [ ${SPACE_S} -gt 85 ];
then
echo "Exec space opener"
sudo sh /root/space_opener.sh
fi
sh ./subcommands/initDB.sh &
sh ./subcommands/AnyOtherShellscripts.sh &
wait
echo "::Completed::"
df -h | grep "centos\-root"
・ディスク使用量が85%を超えたらスペースを空けるようにしています
/root/space_opener.sh
#!/bin/bash
echo "# 作業前 空き容量"
df -h
# rootユーザでなければ終了
if [[ "root" == $(whoami) ]];
then
echo "# root user"
docker system prune -f
docker rmi -f $(sudo docker images -a | awk '/^[^R]/{print $3}')
else
echo "# Not root user"
exit 1
fi
echo "# 作業後 空き容量"
df -h
subcommands/initDB.sh
#!/bin/bash
docker-compose down
sleep 2s
docker-compose up -d
参考
先達の皆様のおかげで快適に使えております。
ありがとうございます。