Главная/Работа с Images/Обзор

Раздел 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 и почему хэш идентифицирует содержимое).

Материалы

  1. Архитектура image
    Из чего состоит образ: layers, manifest, config, index. Content-addressable storage и роль digest. Где всё это хранится на диске. Различия между классическим image store и containerd image store в Docker Engine 29.

  2. Слои и copy-on-write
    Как из неизменяемых слоёв собирается единая файловая система. OverlayFS: lowerdir, upperdir, merged. Writable container layer, whiteout-файлы, стоимость записи в большой файл. Почему удаление файла не уменьшает образ.

  3. Tags и digests
    Полное имя образа: registry, namespace, repository, tag, digest. Почему latest — не версия. Неизменяемость digest. Pull policy и когда Docker обращается к registry. Практика закрепления версий.

  4. Управление images
    docker pull, docker images, docker image inspect, docker history, docker tag, docker rmi. Анализ размера. Dangling images: откуда берутся и как удалять. Безопасная очистка и разбор опасных вариантов docker system prune.

  5. Save, load, export, import
    Перенос образов без registry. Чем save/load отличается от export/import и почему второй теряет историю и метаданные. Работа с multi-platform образами. Практический сценарий переноса на изолированную машину.

  6. Практические задания
    Лабораторные задания раздела с проверкой результата.

Рекомендуемый порядок чтения

Последовательный: 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.

Критерии завершения раздела

Раздел пройден, когда учащийся может без подсказок:

  1. Объяснить, почему два образа с разными tags могут занимать на диске меньше суммы своих размеров.
  2. Найти в docker history слой, ответственный за большую часть размера образа.
  3. Объяснить, почему RUN rm -rf /var/lib/apt/lists/* в отдельной инструкции не уменьшает образ.
  4. Сказать, чем image@sha256:... надёжнее image:1.2.3, и когда эта разница критична.
  5. Перенести образ на машину без доступа к registry и подтвердить идентичность.
  6. Удалить неиспользуемые образы, не удалив нужные, и объяснить разницу между prune и prune -a.

Проверьте себя: Quiz 03.

Что дальше

Раздел объяснил, откуда берётся файловая система container. Следующий раздел разбирает жизненный цикл процесса, который в этой файловой системе запускается.

Навигация

Диаграмма: слои образа

← Предыдущий раздел: Основы Containerization
Вернуться к главному оглавлению
Следующий раздел: Containers и lifecycle →

Markdown на GitHub ↗