Раздел 3. Работа с Images
Image — это не «архив с приложением». Это набор неизменяемых слоёв файловой системы плюс метаданные, описывающие, как из них собрать корневую файловую систему и какой процесс в ней запустить. Понимание этой структуры напрямую влияет на три вещи, которые волнуют разработчика: размер образа, скорость сборки и воспроизводимость развёртывания.
Раздел разбирает строение image изнутри: слои и copy-on-write, content-addressable storage, manifest и config, разницу между tag и digest. Затем переходит к практике: анализ размера через docker history, управление локальным кэшем, безопасное удаление, перенос образов между машинами без registry.
Отдельное внимание — изменению в Docker Engine 29, где containerd image store стал значением по умолчанию для новых установок. Это меняет вывод docker images и поведение docker save/docker load, и незнание этого приводит к путанице при работе на машинах с разными версиями.
Цели обучения
После раздела учащийся сможет:
- описать строение image: layers, manifest, config, content-addressable storage;
- объяснить, что такое writable container layer и как работает copy-on-write;
- прочитать метаданные образа через
docker image inspectиdocker history; - объяснить, из чего складывается размер образа, и найти слой, который его раздувает;
- осознанно выбирать между tag и digest и объяснить, почему tag не является идентификатором;
- управлять pull policy и локальным кэшем образов;
- безопасно удалять образы, отличая dangling от неиспользуемых;
- переносить образ между машинами через
save/loadи объяснить, чем это отличается отexport/import; - определить, какой image store используется в его системе, и учесть различия в поведении.
Предварительные знания
- Раздел 02. Основы Containerization — терминология и модель изоляции;
- понимание файловой системы Linux и точек монтирования;
- базовое представление о хэш-функциях (что такое SHA-256 и почему хэш идентифицирует содержимое).
Материалы
-
Архитектура image
Из чего состоит образ: layers, manifest, config, index. Content-addressable storage и роль digest. Где всё это хранится на диске. Различия между классическим image store и containerd image store в Docker Engine 29. -
Слои и copy-on-write
Как из неизменяемых слоёв собирается единая файловая система. OverlayFS: lowerdir, upperdir, merged. Writable container layer, whiteout-файлы, стоимость записи в большой файл. Почему удаление файла не уменьшает образ. -
Tags и digests
Полное имя образа: registry, namespace, repository, tag, digest. Почемуlatest— не версия. Неизменяемость digest. Pull policy и когда Docker обращается к registry. Практика закрепления версий. -
Управление images
docker pull,docker images,docker image inspect,docker history,docker tag,docker rmi. Анализ размера. Dangling images: откуда берутся и как удалять. Безопасная очистка и разбор опасных вариантовdocker system prune. -
Save, load, export, import
Перенос образов без registry. Чемsave/loadотличается отexport/importи почему второй теряет историю и метаданные. Работа с multi-platform образами. Практический сценарий переноса на изолированную машину. -
Практические задания
Лабораторные задания раздела с проверкой результата.
Рекомендуемый порядок чтения
Последовательный: 01 → 02 → 03 → 04 → 05 → exercises.
Уроки 01 и 02 читаются вместе — второй объясняет механизм, введённый в первом. Урок 03 можно прочитать отдельно в любой момент: он самостоятельный и часто нужен как справка.
Практические задания
| № | Задание | Тип |
|---|---|---|
| 1 | Загрузить python:3.13-slim, посчитать число слоёв и найти самый большой | обяз. |
| 2 | Сравнить docker pull по tag и по digest, показать, что digest не меняется | обяз. |
| 3 | Создать container, изменить в нём файл, найти изменённую копию в writable layer | обяз. |
| 4 | Сохранить образ в архив, удалить локально, восстановить из архива, сверить digest | обяз. |
| 5 | Найти образ, где удалённый в поздних слоях файл всё ещё занимает место | доп. |
| 6 | Сравнить результат docker save и docker export для одного и того же образа | доп. |
| 7 | Определить, какой image store используется, и объяснить, чем отличается вывод docker images | доп. |
| 8 | Дан образ размером 1.4 GB. Найти причину и предложить способ уменьшения без изменения приложения | ★ |
Полные формулировки — в exercises.md.
Критерии завершения раздела
Раздел пройден, когда учащийся может без подсказок:
- Объяснить, почему два образа с разными tags могут занимать на диске меньше суммы своих размеров.
- Найти в
docker historyслой, ответственный за большую часть размера образа. - Объяснить, почему
RUN rm -rf /var/lib/apt/lists/*в отдельной инструкции не уменьшает образ. - Сказать, чем
image@sha256:...надёжнееimage:1.2.3, и когда эта разница критична. - Перенести образ на машину без доступа к registry и подтвердить идентичность.
- Удалить неиспользуемые образы, не удалив нужные, и объяснить разницу между
pruneиprune -a.
Проверьте себя: Quiz 03.
Что дальше
Раздел объяснил, откуда берётся файловая система container. Следующий раздел разбирает жизненный цикл процесса, который в этой файловой системе запускается.
Навигация
← Предыдущий раздел: Основы Containerization
Вернуться к главному оглавлению
Следующий раздел: Containers и lifecycle →