LINUX.ORG.RU
решено ФорумAdmin

Как смонтировать squashfs-образ в каталог Docker-контейнера?

 ,


0

2

Нужно в сторонний (т.е. без возможности доковырять Dockerfile со своими скриптами) docker-контейнер смонтировать squashfs-образ.

— Если указываю для -v в качестве исходника файл — ругается «not a directory».

— Если монтирую в хостовый каталог и указываю в -v его, то в контейнере этот каталог пустой.

Как быть? :-/

★★★★★

с файлом ты погорячился. Может через loop можно?

мысль в слух - А нельзяли через remount aufs подпиховать данные?

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

с файлом ты погорячился

Когда есть 400 тыс. файлов в 65536 каталогах и так несколько раз и к ним идёт активный параллельный доступ в десяток потоков, то обычные fs (особенно ext4, а её поменять нельзя в данном случае) начинают сильно проигрывать squashfs.

ext4, вообще, такая хрень, что часто loop-файл с reiserfs поверх ext4 при работе с тонной мелочи во время параллельного доступа оказывается быстрее, чем чистая ext4 :) Особенно, когда требуется регулярный обход по обширному дереву, например, rsync кешей или их чистка. Тут ext4 вообще в ад превращается.

А нельзяли через remount aufs подпиховать данные?

Х.з. При монтировании «снаружи» во всех вариантах, что пробовал, в контейнер ничего не попадает.

Решил задачу пока жутким костылём — запускаю контейнер с ключиком --privileged и по -v монтирую внутрь squash-файл. А уже после запуска контейнера делаю docker exec с командой монтирования squashfs куда нужно. Но странно, что такую задачу штатными средствами, похоже, не решить :-/

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

БД тут явно не в тему будет. Это статика для nginx. Из БД придётся скриптом отдавать, что на порядки снизит производительность. Ну и такие важные для меня мелочи, как лёгкость перебрасывания на другие хосты. Есть разница между копированием одного жирного блоба, копированием сотен тысяч мелочи и переносом БД на десятки гигабайт :)

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

Решил задачу пока жутким костылём — запускаю контейнер с ключиком --privileged и по -v монтирую внутрь squash-файл. А уже после запуска контейнера делаю docker exec с командой монтирования squashfs куда нужно. Но странно, что такую задачу штатными средствами, похоже, не решить :-/

а что, в докере нет хуков как в lxc ?

В lxc есть проблема с подмонтированием после старта контейнера, но хуками при старте можно смонтровать все необходимое.

Расплодили недотехнологий :) :(

loop-девайсы вроде как общие.

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

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

Ну, в принципе, можно вместо дефолтовой команды старта использовать свою, которая сделает что надо, а потом запустит дефолт. Но это уже вмешательство в контейнер — как минимум, надо смотреть дефолтовую команду.

KRoN73 ★★★★★
() автор топика

Если монтирую в хостовый каталог и указываю в -v его, то в контейнере этот каталог пустой.

А если в подкаталог? То есть через -v пробрасывать /foo, а squashfs смонтировать в /foo/bar.

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

Вот последний абзац в Как смонтировать squashfs-образ в каталог Docker-контейнера? (комментарий) через такой вариант и решается. Но костыльно, т.к. требует привелегий для контейнера и запуск docker exec.

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

Попробовал смонтировать squashfs на хосте и прокинуть эту же директорию в контейнер (с debian:wheezy) через -v. И... сработало.

Стоит пакет docker.io версии 1.8.3~ds1-2, Debian testing.

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

И... сработало.

Я именно такой вариант вначале пробовал — и не работал. Но у меня Docker 1.7.0.


Надо обновиться.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

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

Спасибо.

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

в итоге что получилось ?

файл с .sqhs смонтирован через loop в каталог, который потом через bind монтируется в контейнере ?

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

файл с .sqhs смонтирован через loop в каталог

Так. В хостовый каталог.

который потом через bind монтируется в контейнере ?

Вот тут уже х.з., каким механизмом docker монтирует хостовый каталог в контейнер. Просто через -v указал (docker-compose.yml надо для этого проекта сделать, но пока не вмешивался в legacy :)).

...

Теперь, вот, думаю, такую же бы фигню и для LXC. Тот же образ нужен в LXC-контейнере. Пока придётся запускать тоже LXC с привилегиями.

Забавно при чём — корень LXC-контейнера можно хоть в loop-образ, хоть (не пробовал, но пишут) в squashfs монтировать. А вот вторичное монтирование — только на реальные каталоги.

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

А вот вторичное монтирование — только на реальные каталоги.

вторичное монтирование - что это ? lxc.mount.entry или lxc.hook.mount ?

в lxc.hook.mount у меня замечательно работает

mount -o ro -t iso9660 /dev/loop0 ${LXC_ROOTFS_MOUNT}/iso

с «lxc.cap.drop = sys_module sys_admin»

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

lxc.hook.mount ?

Ага. Этой опции я не знал. Она появилась после того, как я LXC начал использовать :) Попробую. Спасибо.

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

с «lxc.cap.drop = sys_module sys_admin»

По документации нифига непонятно. Этот хук вызывается внутри контейнера и там можно монтировать только уже монтированные ранее в контейнер каталоги/файлы/устройства или он вызывается на уровне хоста и можно оперировать источниками хоста?

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

Ага, поэкспериментировал. Монтирование идёт в контексте хоста, так что пробрасывать файл внутрь не нужно.

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

Я монтировал образы в libvirt-lxc контейнер. Монтировались как хостовые каталоги, в которые смонтирован образ на хосте, так и непосредственно образы. Все штатно, в xml-файле контейнера настраивал. Под rhel7.

iliyap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.