LINUX.ORG.RU
ФорумAdmin

Docker и организация хранения данных

 , , , ,


0

1

ЛОР, привет!

Разворачиваю очередной докер хост на своём домашнем сервере и возник вопрос как правильно организовать хранение данных, которые генерируются контейнерами.

Имею:

  • HP Microserver G8;
  • Хост ОС - Alpine Linux (так исторически сложилось);
  • 2 блочных устройства (2 логических диска, ибо собрал 2 рейд массива);
  • Установленный из репозитория Docker.

С сетевой частью разобрался. Остаётся понять как докеру отдать одно блочное устройство под контейнера без сложных костылей.

Найденные решения:

  1. Использовать bind mounts;
  2. Использовать плагин (драйвер) - local-persist;
  3. Нарезать блочное устройство на разделы и отдать контейнеру по разделу;
  4. Примонтировать диск к /var/lib/docker;
  5. ???

Какой вариант оптимальный на ваш взгляд? Есть ли ещё варианты?


Если бы существовал оптимальный вариант, других бы не существовало. Подумай об этом.

Aceler ★★★★★
()
Ответ на: комментарий от Aceler

Оптимальный вариант для моего кейса…

santic
() автор топика
Ответ на: комментарий от mittorn

Окей, допустим.

Пока рассматриваю вариант 1 и 4 из списка.

Пока склоняюсь к варианту 4, т.к. через docker volumes легко рулить хранилищами и есть возможность лёгкой миграции в случае чего.

santic
() автор топика

вопрос как правильно организовать хранение данных

Так а цель-то в чём? Чего добиться пытаешься?

Использовать bind mounts;

КМК, bind mounts не для этого. Это скорее опция для разработки.

Использовать плагин (драйвер) - local-persist;

Никогда не слышал о таком. Нашёл поиском - репозиторий архивирован 1.5 месяца назад без объявления причин. Т.е. точно можно исключить из альтернатив.

Нарезать блочное устройство на разделы и отдать контейнеру по разделу;

Жесть, как такое может вообще в голову прийти. Зачем?

Chiffchaff
()
Ответ на: комментарий от Chiffchaff

Так а цель-то в чём? Чего добиться пытаешься?

Из коробки все генеририуемые контейнерами данные лежат в каталоге </var/lib/docker/…>, который находится в корневом разделе. Мне надо использовать по максимому 1 локальный диск (рейд) для данных контейнеров.

КМК, bind mounts не для этого. Это скорее опция для разработки.

Да, это даже в документации описано.

Никогда не слышал о таком. Нашёл поиском - репозиторий архивирован 1.5 месяца назад без объявления причин. Т.е. точно можно исключить из альтернатив.

Да, к сожалению, это не официальная фича, которая не завелась в Alpine.

Жесть, как такое может вообще в голову прийти. Зачем?

Набрасывал как вариант, но будет жутко неудобно всё это деплоить. Отметаю.

Пока остановился на варианте отдать весь диск под /var/lib/docker.

santic
() автор топика
Ответ на: комментарий от Aceler

так ведь помимо gcc существует clang) А помимо иксов зачем-то появился вейленд)

daniyal
()
Ответ на: комментарий от santic

Ты можешь докеру сказать где угодно хранить свои данные. Настраивается в /etc/docker/daemon.json

Вроде есть 3 варианта.

  1. Монтирование из твоего п.1
  2. Анонимус волум
  3. Именнованый волум

2 и 3 хранятся в дире докера.

Но что ты хранить хочешь?

Базу данных, например?

Tesler
()
Ответ на: комментарий от Tesler

Но что ты хранить хочешь? Базу данных, например?

Как выше писал, моя основная цель - утилизировать дисковое пространство рейд массива под контейнера докера.

Т.е. будут стейтефул контейнера, например, с постгресом или контейнера с генерацией контента (игровые серверами и т.д.).

/etc/docker/daemon.json

Спасибо, покапаюсь в доках.

santic
() автор топика

контейнера

Ужас, зачем так писать? Это читается как родительный падеж единственного числа и портит предложение. Контейнеры.

Что касается твоего вопроса, то очевидный вариант 4, все остальные - какие-то глупости. Только тут, как уже уточнили, можно ещё сменить и путь хранения на другой - /var, который почему-то во всех дистрах под это дефолтно используют, совершенно неудачное место для таких штук (а ещё - для директории веб-сервера и для баз данных), это всё разумнее класть либо в /home либо в какое-то отдельное место. А /var оставить для системных файлов, не связанных с полезной нагрузкой сервера.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от santic

Т.е. будут стейтефул контейнера, например, с постгресом или контейнера с генерацией контента (игровые серверами и т.д.).

Я в докере нуб, потихоньку разбираюсь вот. Но мне думается - разве волюмы и для того и придуманы чтобы «выносить» стейт контейнеров в постоянное хранилище? Если правильно понимаю концепцию - сам контейнер должен быть легко заменяемым/обновляемым/выкидываемым и внутри ничего пользовательского быть не должно.

И сами имейджи/контейнеры вроде как много места не занимают, пускай и будут на системном диске ежель он не совсем мал. А волюмы контейнеров уже прописать в точку монтирования твоего рейда и там дальше по директориям как тебе удобно будет.

frunobulax ★★★★
()
Ответ на: комментарий от santic

Как выше писал, моя основная цель - утилизировать дисковое пространство рейд массива под контейнера докера.

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

Возьми смонтируй всё на /var, это самый простой способ, ничего настраивать не надо. Если упрёшься в производительность, приходи с конкретными вопросами.

Aceler ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.