Докер 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 и ниже
Подход, который лучше всего работает для производства, заключается в использовании контейнера только для данных .
Контейнер только для данных запускается на изображении barebones и фактически ничего не делает, кроме предоставления объема данных.
Затем вы можете запустить любой другой контейнер, чтобы иметь доступ к томам контейнера данных:
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: удалить контейнер при выходе
- --volumes-from DATA: присоединить к томам, совместно используемым контейнером DATA
- -v $ (pwd): / backup: bind смонтировать текущий каталог в контейнер; записать файл tar в
- busybox: небольшое простое изображение - хорошо для быстрого обслуживания
- 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
Вот хорошая статья от отличного Брайана Гоффа, объясняющая, почему хорошо использовать одно и то же изображение для контейнера и контейнера данных.