Skip to content

Instantly share code, notes, and snippets.

@nicklegr
Created September 2, 2022 07:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nicklegr/9a792c00c02b524501b15ffcd84128e1 to your computer and use it in GitHub Desktop.
Save nicklegr/9a792c00c02b524501b15ffcd84128e1 to your computer and use it in GitHub Desktop.
Docker volumeの内容をバックアップ
#!/bin/bash
# バックアップスクリプト
# docker-compose.ymlがあるディレクトリで、コンテナの外で実行します。elasticsearchコンテナを起動中なのが前提
# 使い方
# 第1引数: バックアップファイルを作成するディレクトリ
# 使用例
# $ ./backup.sh /home/docker/backup/docker-elk
set -o errexit
set -o nounset
if [ $# -ne 1 ]; then
echo "usage: ./backup.sh <output_dir>"
exit 1
fi
OUTPUT_DIR=$1
SERVICE_NAME=elasticsearch
WORK_DIR=`mktemp --directory`
ES_CONTAINER=$(docker-compose ps -q $SERVICE_NAME)
REPOS_VOLUME=$(docker inspect $ES_CONTAINER | jq -r '.[0].Mounts | map(select(.Destination == "/usr/share/elasticsearch/repository"))[0].Name')
# データベースのスナップショットをvolumeから取り出す
docker run --rm -v $WORK_DIR:/dst -v $REPOS_VOLUME:/repository busybox \
tar cpzf /dst/repository.tgz -C /repository .
# *.envファイルのコピー
cp .env $WORK_DIR
# アーカイブ(スナップショットで圧縮済みなのでこちらは無圧縮)
tar cpf $OUTPUT_DIR/docker-elk_backup_`date +%Y%m%d_%H%M%S`.tar -C $WORK_DIR .
rm -rf $WORK_DIR
#!/bin/bash
# スナップショットリポジトリのレストアスクリプト
# docker-compose.ymlがあるディレクトリで、コンテナの外で実行します
# elasticsearchコンテナが起動中で、スナップショットリポジトリの設定を「行う前に」レストアする必要がある
#
# 使い方
# 第1引数: バックアップファイル(*.tar)
# 使用例
# $ ./restore_repository.sh /home/docker/backup/docker-elk/docker-elk_backup.tar
set -o errexit
set -o nounset
if [ $# -ne 1 ]; then
echo "usage: ./restore_repository.sh <backup_file>"
exit 1
fi
INPUT_FILE=$1
SERVICE_NAME=elasticsearch
WORK_DIR=`mktemp --directory`
ES_CONTAINER=$(docker-compose ps -q $SERVICE_NAME)
REPOS_VOLUME=$(docker inspect $ES_CONTAINER | jq -r '.[0].Mounts | map(select(.Destination == "/usr/share/elasticsearch/repository"))[0].Name')
# アーカイブを展開
tar xf $INPUT_FILE -C $WORK_DIR
# データベースのスナップショットをvolume内に展開
docker run --rm -v $WORK_DIR:/src -v $REPOS_VOLUME:/repository busybox \
tar xpf /src/repository.tgz -C /repository
rm -rf $WORK_DIR
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment