#!/bin/bash # Default values TYPE="postgres" SERVICE="" CONTAINER="" ENV_FILE=".env" ALREADY_UP=true while getopts "t:s:c:e:" opt do case "$opt" in t) TYPE="$OPTARG";; s) SERVICE="$OPTARG";; c) CONTAINER="$OPTARG";; e) ENV_FILE="$OPTARG";; esac done ### # Preparation FILENAME="${SERVICE}_$(date +"%Y%m%d-%H%M").sql" mkdir -p /srv/apps/$SERVICE/dump rm -rf /srv/apps/$SERVICE/dump/* # Load env file (user, db name) source /srv/apps/$SERVICE/$ENV_FILE cd /srv/apps/$SERVICE/ # Check if the service was up or not, to stop it if necessarry in the end if [ -z `docker-compose ps -q $CONTAINER` ] || [ -z `docker ps -q --no-trunc | grep $(docker-compose ps -q $CONTAINER)` ]; then echo "Service not running, starting it…" docker-compose -f /srv/apps/$SERVICE/docker-compose.yml up -d $CONTAINER ALREADY_UP=false else echo "Service already running." fi # Dump (within the container) if [ $TYPE == "postgres" ] then docker-compose \ -f /srv/apps/$SERVICE/docker-compose.yml\ exec -T $CONTAINER\ pg_dump -U $POSTGRES_USER -d $POSTGRES_DB -f /$FILENAME elif [ $TYPE == "mysql" ] then docker-compose \ -f /srv/apps/$SERVICE/docker-compose.yml\ exec -T $CONTAINER\ mysqldump -u $MYSQL_USER --databases $MYSQL_DATABASE -p${MYSQL_PASSWORD} -r /$FILENAME fi # Copy the dump file to host echo "Copying the dump file to host…" docker cp ${SERVICE}_${CONTAINER}_1:/$FILENAME /srv/apps/$SERVICE/dump # Compressing echo "Compressing $FILENAME…" gzip /srv/apps/$SERVICE/dump/$FILENAME #docker exec -ti ${SERVICE}_${CONTAINER}_1 cat /$FILENAME > /srv/apps/$SERVICE/dump/$FILENAME #docker-compose -f /srv/apps/${SERVICE}/docker-compose.yml exec -T ${CONTAINER} cat /${FILENAME} > /srv/apps/$SERVICE/dump/$FILENAME # Remove the dump file in the container docker-compose \ -f /srv/apps/$SERVICE/docker-compose.yml\ exec -T $CONTAINER rm /$FILENAME -v if ! $ALREADY_UP ; then echo "Stopping service" docker-compose -f /srv/apps/$SERVICE/docker-compose.yml stop $CONTAINER fi