Докер 1.9.0 і вище
Використовуйте API обсягу
docker volume create --name hello
docker run -d -v hello:/container/path/for/volume container_image my_command
Це означає, що модель контейнера, що містить лише дані, повинна бути відмовлена на користь нових томів.
Насправді API обсягу - лише кращий спосіб досягти того, що було моделлю контейнера даних.
Якщо ви створюєте контейнер за допомогою -v volume_name:/container/fs/path
Docker, він автоматично створить названий том, який ви можете:
- Перерахуйте через
docker volume ls
- Будьте ідентифіковані через
docker volume inspect volume_name
- Створено резервну копію як звичайний каталог
- Резервне копіювання, як і раніше, через
--volumes-from
з'єднання
Новий API томів додає корисну команду, яка дозволяє визначати звисаючі томи:
docker volume ls -f dangling=true
А потім видаліть його через свою назву:
docker volume rm <volume name>
Як підкреслює @mpugach в коментарях, ви можете позбутися всіх томів, що звисають, за допомогою приємного однолінійки:
docker volume rm $(docker volume ls -f dangling=true -q)
# Or using 1.13.x
docker volume prune
Докер 1.8.x і нижче
Підхід, який, здається, найкраще працює у виробництві, - це використовувати контейнер лише для даних .
Контейнер, що містить лише дані, працює на зображенні без кісток і фактично не робить нічого, окрім викриття обсягу даних.
Тоді ви можете запустити будь-який інший контейнер, щоб мати доступ до томів контейнера даних:
docker run --volumes-from data-container some-other-container command-to-execute
- Тут ви можете отримати гарне уявлення про те, як розташувати різні контейнери.
- Тут добре розуміється, як працюють обсяги.
У цій публікації в блозі є хороший опис так званого контейнера як об'ємного шаблону, який уточнює головний момент наявності контейнерів лише для даних .
Документація Docker тепер містить ВИЗНАЧЕНИЙ опис контейнера як об'єм / с шаблон.
Далі йде процедура резервного копіювання / відновлення для Docker 1.8.x та нижче.
НАЗАД:
sudo docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
- --rm: вийміть контейнер під час його виходу
- - об'єми - від DATA: приєднати до томів, що поділяються контейнером DATA
- -v $ (pwd): / резервне копіювання: прив’язати монтувати поточний каталог у контейнер; написати файл tar на
- busbox: невелике простіше зображення - добре для швидкого обслуговування
- tar cvf /backup/backup.tar / data: створює нестиснений файл tar з усіх файлів у каталозі / data
ВІДНОВЛЮВАТИ:
# Create a new data container
$ sudo docker run -v /data -name DATA2 busybox true
# untar the backup files into the new container᾿s data volume
$ sudo docker run --rm --volumes-from DATA2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
data/
data/sven.txt
# Compare to the original container
$ sudo docker run --rm --volumes-from DATA -v `pwd`:/backup busybox ls /data
sven.txt
Ось приємна стаття від відмінного Брайана Гоффа, в якій пояснюється, чому добре використовувати однакові зображення для контейнера та контейнера даних.