LINUX.ORG.RU

Как работает Copy-On-Write система слоев для реализации файловой системы в Docker?

 ,


0

3

Мне хочется до конца понять принципы работы Docker'а. Я читал, что для файловой системы внутри контейнера используется стратегия Copy-On-Write. Можете описать понятным языком как это на самом деле работает? И реализовано ли это в LXC?

У Docker есть разные «драйверы» файловой системы, используются преимущественно многоуровневые ФС: overlayfs (чаще) и aufs (реже).

Многоуровневые ФС — такие псевдо-ФС, которые позволяют монтировать несколько уровней (папок) в одну финальную. У Docker все «нижние» слои монтируются в read-only, и в архитектуре Docker их изменять нельзя.

Текущий верхний слой содержит все изменения относительно нижнего слоя: если был создан новый файл, он создается в папке верхнего уровня и отображается в результирующей папке, если был перезаписан файл из слоя ниже — он копируется на верхний слой, в нем перезаписываются данные, и он «заменяет» старый файл из слоя ниже.

Если файл из слоя ниже был удален, но на его месте не появился новый, он помечается удаленным (whiteout).

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

Текущий верхний слой содержит все изменения относительно нижнего слоя: если был создан новый файл, он создается в папке верхнего уровня и отображается в результирующей папке, если был перезаписан файл из слоя ниже — он копируется на верхний слой, в нем перезаписываются данные, и он «заменяет» старый файл из слоя ниже.
Если файл из слоя ниже был удален, но на его месте не появился новый, он помечается удаленным (whiteout).

И как это позволяет оптимизировать работу? Монтируемые в RO уровни быстрее работают?

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

Быстрее чего? Такова архитектура Docker — делаем базовый уровень, от него новый уровень, от него еще, и так далее.

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

Быстрее чего? Такова архитектура Docker — делаем базовый уровень, от него новый уровень, от него еще, и так далее.

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

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

LXC использует тот сторадж, который ты ему настроишь, там не реализовывают ФС.
если будешь использовать zfs то COW будет автоматом.

system-root ★★★★★
()
Ответ на: комментарий от Gargamel

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

Да, так и есть.

Можно же как то использовать базовый слой на нескольких контейнерах?

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

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

Спасибо, теперь всё ясно, тему закрываю

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

Не, не надо.
Я его пускал под докером года полтора назад, оно рассыпалось через неделю пользования.
Серьезного прогресса по ни с той, ни с другой стороны нет.

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