Короткий ответ
latest — обычный текстовый тег, который может в разное время указывать на совершенно разные версии образа, поэтому он не даёт воспроизводимости развёртывания и затрудняет точный откат на известную рабочую версию.
Как это работает подробнее
тег в Docker — просто указатель (как ветка в Git) на конкретный digest образа; при каждой публикации новой сборки с тем же тегом latest указатель переставляется на новый digest, а старый остаётся доступен только по digest, если его явно не сохранили.
Что использовать на практике
- Практика. для воспроизводимых развёртываний используют конкретные версии (
myapp:1.4.2) или ещё надёжнее — digest (myapp@sha256:...), которые однозначно фиксируют содержимое образа. Это позволяет точно знать, какая версия кода работает в каждом окружении, и безопасно откатываться.
Подводные камни
- Риск. деплоят
myapp:latestв проде и через время не могут понять, какая именно версия кода сейчас запущена, потому что каждыйdocker pull myapp:latestпосле новой сборки меняет фактическое содержимое без изменения имени; при откате пытаются "откатить latest", хотя по факту нужно просто передеплоить предыдущий зафиксированный тег.