Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Як Docker об'єднує шари в образі?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Docker** об'єднує шари за допомогою механізмів **union filesystem (OverlayFS, AUFS та ін.)**. **Ключове:** Docker не «склеює» шари в один фізичний шар. Він монтує їх поверх один одного за допомогою OverlayFS, а зміни в контейнері відбуваються лише у верхньому writable-шарі, використовуючи CoW.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняDocker об'єднує шари за допомогою механізмів **union filesystem (OverlayFS, AUFS та ін.)**. Кожен шар - це окремий read-only шматок файлової системи, а при збірці образу ці шари **логічно "нашаровуються" один на одного**, утворюючи єдиний видимий root-fs для контейнера. ### **Як це працює по кроках** 1. **Кожна інструкція Dockerfile створює шар** `FROM`, `RUN`, `COPY` та ін. -> новий шар (read-only). 2. **Шари не зливаються фізично** Docker не копіює вміст кожного шару всередину наступного. Замість цього він використовує union-mount, який робить їх **єдиним деревом каталогів**. 3. **OverlayFS об'єднує їх через механізми** `lowerdir/upperdir` Основна схема: | Компонент | Що це | |---|---| | `lowerdir` | шари образу (read-only, один над одним) | | `upperdir` | шар зі змінами (під час роботи контейнера) | | `merged` | підсумкова, змонтована файлова система | 4. **Коли файл змінюється - CoW (copy-on-write)** Якщо контейнер змінює файл з нижнього шару, Docker **копіює його у верхній шар** і правка відбувається вже там, не торкаючись базових шарів. ### **Що це дає** | Перевага | За рахунок чого | |---|---| | Економія місця | шари повторно використовуються різними образами | | Швидка збірка | кеш шарів, раніше створені не перезбираються | | Незмінність | нижні шари read-only, не псуються | ### **Головна думка для middle-рівня** > Docker не «склеює» шари в один фізичний шар. Він **монтує їх поверх один одного за допомогою OverlayFS**, а зміни в контейнері відбуваються лише у верхньому writable-шарі, використовуючи CoW. Якщо хочеш, можу доповнити різницею **між OverlayFS і AUFS** або розібрати цей самий процес на рівні системних директорій (`/var/lib/docker/overlay2`).Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.