Тег - змінне посилання: власник реєстру (чи будь-хто з правом запису) може перемістити app:1.4.2 на інший образ. Дайджест - SHA-256 від маніфесту образу:
docker pull ghcr.io/acme/app@sha256:4f8e0a...b21c
docker image ls --digests
docker buildx imagetools inspect ghcr.io/acme/app:1.4.2 # дайджест і платформи
Той самий дайджест завжди означає ті самі байти. Змінити вміст, не змінивши дайджесту, неможливо.
Що дає деплой за дайджестом:
- відтворюваність: усі сервери, нові вузли при масштабуванні й перезапуски отримують точно той самий образ;
- захист від підміни: скомпрометований чи помилково перезаписаний тег у реєстрі не змінить того, що розгортається;
- точний аудит і відкат: у конфігурації деплою записаний конкретний образ, а не мітка, яка могла змінитися;
- кешування: якщо дайджест не змінився, завантажувати нічого.
Мультиплатформні образи: для образу з кількома архітектурами (amd64, arm64) тег вказує на індекс (manifest list), а кожна платформа має свій дайджест. Зазвичай фіксують дайджест індексу - і кожен сервер сам обере потрібну архітектуру.
Практичний підхід - тег для людей, дайджест для машин:
- CI збирає образ з тегами
sha-a1b2c3dі1.4.2, отримує дайджест і записує його в маніфест деплою (Kubernetes, Helm values, Compose-файл); - інструменти на кшталт Renovate оновлюють зафіксовані дайджести автоматично pull-request-ами.
Базові образи в Dockerfile теж можна фіксувати дайджестом:
FROM php:8.5-fpm-alpine@sha256:...
Тег лишається для читабельності, але використовується дайджест. Без цього той самий Dockerfile сьогодні й через місяць може зібрати різні образи - з іншою версією PHP чи системних бібліотек.
Ціна: дайджести нечитабельні, а оновлення базового образу (зокрема з виправленнями безпеки) перестає бути автоматичним - його треба робити свідомо, найкраще інструментом автоматичних оновлень залежностей.
Докладніше в документації: docker image pull: завантаження за дайджестом