-
-
Save nicklegr/9a792c00c02b524501b15ffcd84128e1 to your computer and use it in GitHub Desktop.
Docker volumeの内容をバックアップ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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