Урок 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.
Мини-тест: проверьте себя
Закрепите урок: несколько вопросов, разбор ответов — в конце.
-
Что скачает команда docker pull postgres без тега?
Без тега Docker подставляет latest. Это просто метка, и через месяц она может указывать на другую версию.
-
Почему в рабочих проектах указывают тег вроде postgres:16?
Новая основная версия может хранить данные иначе или вести себя по-другому. Явный тег делает поведение предсказуемым.
-
Почему второй образ на основе alpine скачивается быстрее первого?
Образы складываются из слоёв. Одинаковые слои хранятся один раз и не скачиваются повторно.