Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

概要

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

以上です。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away