Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save WeslyG/ab060b78f7d8f57fe45869ecec700394 to your computer and use it in GitHub Desktop.
Save WeslyG/ab060b78f7d8f57fe45869ecec700394 to your computer and use it in GitHub Desktop.
Перенос docker volume между серверами
Как мигрировать docker volume на примере elasticsearch
# Backup
Запускаем елку, и вкидываем в нее данные, хоть через апи, хоть elasticdump
После этого в вольюмах будет много данных (тестировалось на 2 елке)
Смотрим оф руководство https://docs.docker.com/storage/volumes/#backup-a-container
Сначала надо выяснить где лежат данные, заходим через docker exec -it id bash смотри папку.
Все данные лежат в /usr/share/elasticsearch/data
Идем по руководству. Запускаем ЕЩЕ один контейнер, который возьмет volume нашего контейнера. И мауним к нему текущую папку (не забывать что
маунт ест только абсолютные пути, и штука с $pwd в винде не прокатит) так же уточнить нужно пару важных моментов.
Во первых указывать нужно имя контейнера volume которого хотим взять или id его же. Так же в конце незабыть указать именно нашу папку.
Команда в общем виде будет выглядеть вот так.
docker run --rm --volumes-from elastic_container_name -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /myfolder/for/backup
Команда для нас будет выгдяеть так
docker run --rm --volumes-from load-site_elk2_1 -v C:\Users\WeslyG\git\sandbox:/backup ubuntu tar cvf /backup/backup.tar /usr/share/elasticsearch/data
В итоге в нашей локальной папке sandbox появиться файл backup.tar со всем что было в дате
# Restore
Начинаем восстановление
Ситуация в целом схожая, нужно подмонтироваться к уже существующему контейнеру и просто распаковать данные в нужную папку.
Что делаем?
Подключимся руками, что бы точно быть уверенными что все прошло правильно.
docker run --rm --volumes-from load-site_elk2_1 -v C:\Users\WeslyG\git\sandbox:/backup -it ubuntu bash
Теперь мы в контейнере в папке /backup у нас лежит наш бекап, нам нужно распаковать его в папку /usr/share/elasticsearch
Можно пойти простым путем, и распаковать tar прям в локальную папку, потом переместить нужную (потому что tar -C у меня выпендривался)
tar -xvf backup.tar
cp -Rv data /usr/share/elasticsearch/
нужно ребутнуть контейнер, что бы elk начал нормально отдавать данные
Можно это сделать не выходя из нашего временного контейнера в другой вкладке
docker stop id
docker start id
проверяем curl localhost:9200/_cat/indices
Все должно быть огонь)
Теперь можно выйти из временного контейнера.
Не забываем, что когда мы прописали флаг --rm контейнер удалиться после выхода из него.
Так же было бы не плохо удалить распакованную папку с tar архивом.
p.s если знаете адекватный способ tar -> folder force напишите)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment