2014-10-20 3 views
1

Каков наилучший способ сохранения данных контейнеров с помощью докеров? Я хотел бы иметь возможность сохранить некоторые данные и иметь возможность вернуть их при перезагрузке моего контейнера. Я прочитал этот интересный post, но он точно не отвечает на мой вопрос.Точность и постоянство данных

Насколько я понимаю, у меня есть только один вариант:

docker run -v /home/host/app:/home/container/app 

Это будет монтировать папку countainer на хост.

Есть ли другой вариант? FYI, я не использую связывающие контейнеры (--link)

ответ

2

Использование томов - лучший способ обработки данных, которые вы хотите сохранить из контейнера. Использование флага -v работает хорошо, и вы не должны столкнуться с проблемами с этим.

Вы также можете использовать VOLUME инструкции в Dockerfile, что означает, что вам не придется добавлять какие-либо дополнительные параметры во время выполнения, однако они довольно тесно связаны с определенным контейнером, вам нужно использовать docker start, а чем docker run, чтобы вернуть данные (или, конечно, -v в том, который был создан в прошлом, вероятно, в /var/ где-то).

Общим способом обработки томов является создание data volume container с томами, определяемыми -v Затем, когда вы создаете контейнер приложения, используйте флаг --volumes-from. Это приведет к тому, что ваш новый контейнер будет использовать те же тома, что и контейнер, в котором вы использовали -v (ваш контейнер объема данных). Конечно, это может показаться, что вы меняете проблему где-то в другом месте.

Это позволяет легко обмениваться томами с несколькими контейнерами. Возможно, у вас есть контейнер для вашего приложения, а другой для логсташа.

+0

Благодаря Marcus, если я правильно понимаю, -v/приложение только полезно, если я использую контейнеры объем данных (--volumes-с). Он не сохранит никаких данных. Если я не хочу создавать контейнер данных тома, мое единственное решение - связать папку контейнера с хостом? (-v/home/host/app:/home/container/app) Правильно ли это?Было бы неплохо иметь систему, которая автоматически создает том на хосте для хранения данных, но не указывая точку монтирования хоста (поскольку нам нужно убедиться, что точка монтирования узла существует) –

+0

Все тома будут сохраняться в файловой системе хоста до тех пор, пока вы удаляете контейнер. Вы можете использовать тома вообще и все еще иметь данные, если вы снова запустите один и тот же идентификатор контейнера (хотя это не самая лучшая практика). –

+0

@FlorentValdelievre, если вы создаете контейнер данных, тогда вы автоматически получаете каталог для тома в каталоге/var/lib/docker/volume/на хосте. Преимуществом контейнера тома является аспект переносимости, т. Е. Вам не нужно полагаться на определенную иерархию каталогов, устанавливаемую на хост-системе ... это именно то, что вам кажется нужным. Единственное предостережение - это устройство хранения для жилья/var/lib/docker/тома, которое должно иметь емкость для того, что вы вкладываете в объем –

0

создать контейнер тома: этот формат -v создает том, каталог, например. /var/lib/docker/volume/d3b0d5b781b7f92771b7342824c9f136c883af321a6e9fbe9740e18b93f29b69 который до сих пор связывают установленный/контейнер/путь/об

docker run -v /foo/bar/vol --name volbox ubuntu 

теперь я могу использовать этот контейнер, как мой объем.

docker run --volumes-from volbox --name foobox ubuntu /bin/bash 
[email protected]# ls /container/path/vol 

Теперь, если я буду распространять эти два контейнера, они будут работать. Том всегда будет доступен для foobox, независимо от того, на какой хост он развернут.

Загвоздка, конечно, идет, если вы не хотите, чтобы ваше хранилище, чтобы быть в/вар/Lib/докеров/томов ...

Я предлагаю вам взглянуть на некоторые из отличный пост Майкл Кросби https://docs.docker.com/userguide/dockervolumes/ и докер документы https://docs.docker.com/userguide/dockervolumes/

Смежные вопросы