Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- set -e
- set -o pipefail
- set -u
- # set -x
- function !!
- {
- echo "$@"
- "$@"
- return $?
- }
- function is_pipe
- {
- if [ -p /dev/stdin ]; then
- #if [ -p /dev/fd/0 ]; then
- #if [ -p /proc/self/fd/0 ]; then
- #if [ -t 0 ]; then
- return 0
- elif [ -p /dev/stdout ]; then
- return 0
- else
- return 1
- fi
- }
- MYSQL_PORT=${MYSQL_PORT:-3306}
- if [ -z "${MYSQL_DATA_DIR:-}" ];then
- echo "mysql のデータディレクトリの位置を環境変数 MYSQL_DATA_DIR で指定してください"
- exit -1
- fi
- if [ -z "${MYSQL_VERSION:-}" ];then
- echo "mysql のバージョンを環境変数 MYSQL_VERSION で指定してください"
- exit -1
- fi
- if [ ! -d "${MYSQL_DATA_DIR}" ];then
- mkdir -p "${MYSQL_DATA_DIR}"
- fi
- MYSQL_DATA_DIR_SUM="$(cd "$MYSQL_DATA_DIR" && pwd -|md5)"
- CONTAINER_NAME=mysql-$MYSQL_VERSION-${MYSQL_DATA_DIR_SUM:0:5}
- # 起動済み
- eps=$(docker ps -f "name=/$CONTAINER_NAME\$" -q)
- # 停止中
- eps2=$(docker ps -f "name=/$CONTAINER_NAME\$" -q -a)
- case "${1:-}" in
- "start")
- echo "VERSION=$MYSQL_VERSION DATA_DIR=$MYSQL_DATA_DIR PORT=$MYSQL_PORT CONTAINER=$CONTAINER_NAME"
- if [ -z "$eps" ];then
- if [ -z "$eps2" ];then
- !! docker run -d --name "$CONTAINER_NAME" \
- -e MYSQL_ALLOW_EMPTY_PASSWORD=${MYSQL_ALLOW_EMPTY_PASSWORD:true} \
- -e MYSQL_ROOT_HOST=${MYSQL_ROOT_HOST:\%} \
- -p ${MYSQL_PORT}:3306 \
- ${MYSQL_DATABASE:+ -e MYSQL_DATABASE=$MYSQL_DATABASE } \
- ${MYSQL_USER:+ -e MYSQL_USER=$MYSQL_USER } \
- ${MYSQL_PASSWORD:+ -e MYSQL_PASSWORD=$MYSQL_PASSWORD } \
- -e MYSQL_HISTFILE=/var/lib/mysql/mysql_history \
- -v "$MYSQL_DATA_DIR:/var/lib/mysql" \
- "mysql/mysql-server:$MYSQL_VERSION"
- else
- !! docker start "$CONTAINER_NAME"
- fi
- else
- echo "mysql is running"
- fi
- ;;
- "stop")
- echo "VERSION=$MYSQL_VERSION DATA_DIR=$MYSQL_DATA_DIR PORT=$MYSQL_PORT CONTAINER=$CONTAINER_NAME"
- if [ -n "$eps" ];then
- !! docker stop "$CONTAINER_NAME"
- else
- echo "mysql is not running"
- fi
- ;;
- "status")
- echo "VERSION=$MYSQL_VERSION DATA_DIR=$MYSQL_DATA_DIR PORT=$MYSQL_PORT CONTAINER=$CONTAINER_NAME"
- if [ -z "$eps2" ];then
- echo "docker mysql is not running"
- exit -1
- else
- docker ps -f "name=/$CONTAINER_NAME\$" -a
- fi
- ;;
- "rm")
- echo "VERSION=$MYSQL_VERSION DATA_DIR=$MYSQL_DATA_DIR PORT=$MYSQL_PORT CONTAINER=$CONTAINER_NAME"
- if [ -n "$eps" ];then
- !! docker stop "$CONTAINER_NAME"
- fi
- if [ -n "$eps2" ];then
- !! docker rm "$CONTAINER_NAME"
- else
- echo "mysql container is not exists"
- fi
- ;;
- "client"|"dump"|"mysqldump")
- if [ -z "$eps" ];then
- echo "mysql is not running"
- exit -1
- else
- case "${1}" in
- "client")
- cmd=mysql
- ;;
- "dump"|"mysqldump")
- cmd=mysqldump
- ;;
- esac
- shift
- term_opt=""
- if ! is_pipe; then
- term_opt="-t"
- fi
- docker exec -i $term_opt "$CONTAINER_NAME" $cmd "$@"
- fi
- ;;
- *)
- echo "mysql を docker で起動します。 MYSQL_VERSION と MYSQL_DATA_DIR の環境変数を指定してください"
- echo "VERSION=$MYSQL_VERSION DATA_DIR=$MYSQL_DATA_DIR PORT=$MYSQL_PORT CONTAINER=$CONTAINER_NAME"
- echo "{start|stop|rm|client|dump|status}"
- exit -1
- esac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement