Skip to content

Instantly share code, notes, and snippets.

@pavelsr
Last active March 31, 2020 21:57
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pavelsr/699cb1d886f37c8e7a0939b9e9831125 to your computer and use it in GitHub Desktop.
Save pavelsr/699cb1d886f37c8e7a0939b9e9831125 to your computer and use it in GitHub Desktop.
Script for quickly moving docker volume to another server
# Script for quickly moving docker volume to another server
echo "List of all running docker containers"
docker ps --format "table {{.Names}}"
echo " ============================== "
docker ps --format='{{.Name }}'
# defaults
REMOTE_HOST='admin@193.124.205.64'
REMOTE_FOLDER='/home/admin/inbox/www'
CONTAINER='nginx'
read -p "Type the name of container which you want to backup, default is $CONTAINER : " input
CONTAINER=${input:-$CONTAINER}
read -p "Type the remote host details, default is $REMOTE_HOST: " input
REMOTE_HOST=${input:-$REMOTE_HOST}
read -p "Specify full path to existing remote folder, default is $REMOTE_FOLDER: " input
REMOTE_FOLDER=${input:-$REMOTE_FOLDER}
for row in $(docker inspect $CONTAINER | jq -cr '.[].Mounts[].Source'); do
echo "Working with volume ${row}"
cd ${row}
tar -zcvf $CONTAINER.tar.gz *
ssh $REMOTE_HOST "mkdir -p $REMOTE_FOLDER"
scp $CONTAINER.tar.gz $REMOTE_HOST:$REMOTE_FOLDER/..
ssh $REMOTE_HOST "tar -xvf $REMOTE_FOLDER/../$CONTAINER.tar.gz -C $REMOTE_FOLDER"
done
@pavelsr
Copy link
Author

pavelsr commented Jun 3, 2018

Docker-compose for auto-importing backup.sql:

version: '2'

services:
    opencart:
      restart: always
      image: vimagick/opencart
      networks:
          - proxy-tier
      volumes:
       - ${PWD}/www:/var/www/html
      environment:
          VIRTUAL_HOST: fabmarkt.ru
          VIRTUAL_PORT: 80
          LETSENCRYPT_HOST: fabmarkt.ru
          LETSENCRYPT_EMAIL: p@fabmarkt.ru
      depends_on:
      - "mysql"

    mysql:
      restart: always
      image: mysql
      networks:
          - proxy-tier
      volumes:
       - ${PWD}/backup.sql:/docker-entrypoint-initdb.d/backup.sql
       - ${PWD}/mysql:/var/lib/mysql
      environment:
        - MYSQL_ROOT_PASSWORD=root
        - MYSQL_DATABASE=opencart


networks:
  proxy-tier:
    external:
      name: nginx-proxy

@pavelsr
Copy link
Author

pavelsr commented Jun 3, 2018

In addition to move-volume and move-database also need:

move-file
move-directory # move folder without compression (convenient for small folders)
move-to-user # move folders from home to home inside host

TO-DO:

quick deployment of nginx-proxy

https://bitbucket.org/serikov/nginx-proxy/src/master/

@pavelsr
Copy link
Author

pavelsr commented Jun 3, 2018

Test database backup import:

docker run  -v $(pwd)/backup.sql:/docker-entrypoint-initdb.d/backup.sql -it mysql:5.7 mysql -uroot -proot -Dopencart

error during mysql dump

InnoDB: Table flags are 0 in the data dictionary but the flags in file

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment