docker-composeのオペレーションに使えるシェルスクリプト

概要

docker-compose.ymlで開発環境とか使ってる際に使つとオペレーションが楽になるシェルスクリプトです。
他のリポジトリでもdocker-compose.ymlを使っていて、別の開発リポジトリのコンテナがすでに起動とかしていると docker-compose up -d とかで起動に失敗することがあります。
また、動作がおかしくなったりして、一回イメージごとキレイにするのにいくつかコマンドを打つ必要があります。
そういった煩わしさをなくすために作りました。
改善余地はありますが、dockerコマンドを何個か叩くのを減らせますし、シンプルなのでわかりやすいかと思います。

動作環境

  • MacOS (bashが動けばどこでも使えるかと思います。)
  • Docker for Mac 18.09

使い方

docker-compose.ymlが存在するディレクトリに、下記スクリプトを配置します。
その後で下記スクリプトを dockerops.sh などわかりやすいファイル名にします。
そのままだと実行権限が無いので、 chmod u+x dockerops.sh とかしてあげると良いです。
その後で ./dockerops.sh -h とかでヘルプを見つつ、必要なコマンドを実行します。

dockerops.sh

#!/bin/bash

up () {
IMAGES=$(docker ps -q | wc -l)
if [ "${IMAGES}" -ge 1 ]; then
echo "現在起動しているコンテナを停止します..."
docker kill $(docker ps -q)
fi
echo "コンテナを起動します..."
docker-compose up -d
}

build() {
IMAGES=$(docker ps -q | wc -l)
if [ "${IMAGES}" -ge 1 ]; then
echo "現在起動しているコンテナを停止します..."
docker kill $(docker ps -q)
fi
echo "コンテナを作り直します..."
docker-compose build
echo "コンテナを起動します..."
docker-compose up -d
}

clean () {
IMAGES=$(docker images | awk '/docker_/ {print $1}' | wc -l)
if [ "${IMAGES}" -ge 1 ]; then
echo "コンテナとして使用できないイメージを削除します..."
docker image prune -f
echo "コンテナを停止します..."
docker kill $(docker ps -q)
echo "コンテナを削除します..."
docker rm -f $(docker ps -q -a)
echo "イメージを削除します..."
docker rmi -f $(docker images | awk '/docker_/ {print $1}')
fi
}

usage () {
echo $1
cat <<_EOF_
Usage:
$(basename $0) [OPTION]

Description:
"$(pwd)" のDockerのオペレーション用スクリプトです。

Options:
-u upを実行します。現在起動しているコンテナを停止して、"$(pwd)"にあるdocker-composeを起動します。
-b buildを実行します。コンテナのイメージの作り直しをします。Dockerfileを更新した場合はこちら。
-c cleanを実行します。コンテナのイメージを削除します。
-r cleanを実行してからupを実行します。なにかトラブルシュートなどできれいにしたい場合はこちら。
-h ヘルプを表示します。

_EOF_

exit 0
}

while getopts :ubcrh OPT
do
case $OPT in
u ) up;;
b ) build;;
c ) clean;;
r ) clean ; up;;
h ) usage;;
:|\? ) usage;;
esac
done

以上です。