TGViewer
DevOps // Human Help DevOps // Human Help @devopshh · 1.04K subscribers
Post #40 603
⌨️ Меняешь права - умножаешь на 2

#реальные_вопросы #docker

А теперь, как я обещал, вопрос из новой меты, даже не вопрос, а целая задачка.

Задача:
На изображении мы видим Dockerfile, в котором за основу берется базовый образ alpine, в контейнер копируется файл размеров 1Gb, следующая инструкция меняет права файла. Вопрос: какого размера получится докер образ?

Ответ:
Образ будет весить ~2.01GB.

Подробный разбор:
Каждая инструкция в файле порождает новый слой, размер образа растет путем простого сложения их размеров.
Слой 1. FROM
Базовый образ Alpine (версия latest) занимает около 8 MB. Минималистичный дистрибутив, он очень популярен, благодаря своему небольшому размеру.
Слой 2. COPY
Файл testfile.img размером 1 GB копируется в контейнер. Docker добавляет новый слой (layer) для этой инструкции, и размер слоя равен размеру файла (в нашем случае случае 1 GB).
Слой 3. RUN
Вносит изменения в файл testfile.img. Docker создает новый слой для этой операции. Даже если изменяются только метаданные (например, права доступа), весь файл копируется в новый слой. Это связано с механизмом Copy-on-Write (COW), который требует копировать весь файл при любых модификациях.
Новый слой добавляет еще 1 GB из-за копирования нашего файла на новый слой.
Итого:
Размер Alpine: ~8 MB.
Слой с копированием файла: ~1 GB.
Слой с изменением прав: ~1 GB.
2.01 GB.

Как исправить?
Копировать файл сразу с нужными правами (заменить последние две инструкции на эту):
COPY --chmod=600 testfile.img /testfile.img


Немного о механизме Copy-on-Write (COW)

Я рассмотрю COW подробнее в другом посте, а пока расскажу о простом правиле. Слои в OverlayFS являются неизменяемыми, стратегия Copy-on-write, обеспечивает совместное использование и копирование файлов, если файл или каталог существует в нижнем слое образа, а другому слою требуется доступ к нему на чтение, он просто использует существующий файл. А когда другому слою потребуется изменить файл, файл копируется в этот слой и изменяется.
  • 👍 3
  • 🔥 2
More from @devopshh
  1. Jun 12, 2026Спрашивается, что должно случиться, чтобы этот канал прервал молчание? Да в целом ничего.…
  2. Feb 11, 2026document post
  3. Feb 11, 2026Всем привет, продолжаем наш экскурс в вопросы с технических собеседований. Загрузка Linux,…
  4. Feb 2, 2026document post
  5. Feb 2, 2026⌨️ Load Average (full + PDF) #Linux Всем привет, я возвращаюсь. Находился в некотором твор…
  6. Oct 27, 2025⌨️ Софт скилы на собеседовании. #рекрутинг #собеседования Почему «говорить правду» на собе…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →