Урок 3 из 8 · 20 мин · обновлено

Образы: теги, слои и реестры

Откуда берутся образы, что такое тег и почему latest коварен, как образы складываются из слоёв, чем официальные образы отличаются от остальных и как смотреть и удалять образы на компьютере.

Откуда берутся образы

В прошлом уроке Docker сам скачал nginx:alpine при первом запуске. Скачать образ заранее можно отдельной командой:

Терминал
docker pull nginx:alpine

Посмотреть, какие образы лежат на компьютере:

Терминал
docker images
Результат
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
nginx         alpine    5b2a9e4f6c31   2 weeks ago   52.5MB
hello-world   latest    d2c94e258dcb   1 year ago    13.3kB
alpine        latest    a8560b36e8b8   3 weeks ago   8.31MB

У вас будут другие ID, даты и размеры — образы регулярно обновляются.

Полное имя образа

Имя образа складывается из трёх частей:

Текст
реестр/имя:тег
  • Реестр — где хранится образ. Если не указан, это Docker Hub. Другие реестры пишут явно, например ghcr.io/… — реестр GitHub.
  • Имя — программа: nginx, postgres, alpine.
  • Тег — версия или вариант: alpine, 16, 1.27.

Если тег не указан, Docker подставляет latest.

Коварство latest

latest звучит как «последняя стабильная», но это просто тег по умолчанию. Авторы образа сами решают, на какую версию он указывает, и меняют это когда угодно.

Представьте: сегодня postgres без тега — это одна основная версия базы данных, через полгода — следующая. Новая основная версия может хранить данные иначе, и ваш проект не запустится на старых данных. Поэтому правило: в работе всегда указывайте версию явно — postgres:16, а не postgres. Для экспериментов latest допустим.

Многие образы предлагают варианты: nginx:alpine — на основе крошечного Linux Alpine, обычно в разы меньше стандартного варианта. Меньше образ — быстрее скачивается, меньше места и меньше лишних программ внутри.

Слои

Образ не один большой файл, а стопка слоёв. Каждый слой — набор изменений: базовая система, установленные программы, файлы приложения.

Слои дают экономию. Если два образа построены на одной базе alpine, её слой хранится на диске один раз, и второй образ скачивается быстрее — Docker тянет только недостающие слои. При скачивании это видно по строкам Already exists и Pull complete напротив разных слоёв.

Как появляются слои, станет понятно в следующем уроке, когда мы соберём свой образ.

Каким образам доверять

На Docker Hub любой может опубликовать образ. Начинайте с официальных образов — они помечены как Docker Official Image и имеют короткие имена без автора: nginx, postgres, python. Их сопровождают авторы программ или команда Docker, регулярно обновляют и проверяют.

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

Удаление образов

Терминал
docker rmi alpine:latest

Образ, по которому создан хотя бы один контейнер, удалить не получится — сначала удалите контейнер. Убрать разом все образы, которые не используются ни одним контейнером и не имеют тега:

Терминал
docker image prune

Попробуйте сами. Скачайте образы postgres:16 и python:3.12-alpine, посмотрите их размеры и сравните. Затем удалите python:3.12-alpine.

Решение
Терминал
docker pull postgres:16
docker pull python:3.12-alpine
docker images
docker rmi python:3.12-alpine

Размеры зависят от версии образа, но разница будет заметной: стандартный postgres:16 обычно весит в несколько раз больше, чем вариант на основе Alpine у Python. Стандартные образы построены на полноценном Linux с большим набором программ.

Образ postgres:16 не удаляйте — он понадобится в уроках 5–7.

Мини-тест: проверьте себя

Закрепите урок: несколько вопросов, разбор ответов — в конце.

  1. Что скачает команда docker pull postgres без тега?

  2. Почему в рабочих проектах указывают тег вроде postgres:16?

  3. Почему второй образ на основе alpine скачивается быстрее первого?