Добавление ссылок на дайджест к вашим образам может сделать сборки более предсказуемыми, вот несколько плюсов и минусов их использования.
Например, вы можете определить это в своем Dockerfile:
FROM python:3.12.7-slim-bookworm
Но вы также можете добавить необязательный дайджест образа:
FROM python:3.12.7-slim-bookworm@sha256:d2ead4f6f2ac4b88e44b45a06caea68ad3e2280c0028afcf136e9edfe28c2346
Без дайджеста, если вы создадите этот образ сегодня или через 3 месяца, вы, скорее всего, получите немного другой образ.
Возможно, будут применены другие исправления безопасности.
В большинстве случаев все будет работать, и в итоге вы получите более безопасный образ, когда будете собирать его в будущем, но иногда это может привести к поломке.
Теги изменяемых образов могут все испортить
Стандартная библиотека Python 3.12 избавилась от пакета setuptools, но официальный образ Docker все равно устанавливался pip, так что он был доступен.
Однако в августе 2024 года его удалили.
Короче говоря, это может сломать стартовое приложения Django для новичков, начинающих использовать проект.
Плюсы и минусы
На бумаге кажется, что его всегда стоит использовать для более предсказуемых билдов, но также можно привести доводы в пользу того, чтобы его избегать.
В конечном итоге решать вам, но вот несколько преимуществ и недостатков:
Плюсы
- Более предсказуемые и воспроизводимые сборки. Если что-то сломалось, вы можете точно указать, когда и почему
- Легче отслеживать изменения с точки зрения аудита безопасности. Каждый раз, когда вы изменяете дайджест, вы можете отследить это в git-коммите
- Больше шансов избежать атак по цепочке поставок. Если репозиторий образов был взломан и злоумышленник выложил вредоносный тег, вы будете в большей безопасности, так как у вас есть дайджест изображения до того, как оно было скомпрометировано.
Минусы
- Если проект должен постоянно обновляться, а в нем что-то ломается, это позволит вам отреагировать на изменение раньше и с меньшими усилиями.
- Некоторые инструменты безопасности иногда испытывают проблемы при сканировании образов с дайджестами. Было замечено в прошлом, когда Snyk молча не сканировал образа, но, возможно, сейчас ситуация изменилась.
Технически это можно автоматизировать с помощью инструментов и скриптов.
Например, вот как можно найти последний дайджест для определенного тега образа с помощью Docker CLI и стандартных инструментов Unix:
$ docker manifest inspect python:3.12.7-slim-bookworm -v | grep digest | head -1
«digest": «sha256:d2ead4f6f2ac4b88e44b45a06caea68ad3e2280c0028afcf136e9edfe28c2346»,
# В качестве альтернативы, если у вас установлен `jq`, вы можете разобрать это немного проще:
$ docker manifest inspect python:3.12.7-slim-bookworm -v | jq -r «.[0].Descriptor.digest»
sha256:d2ead4f6f2ac4b88e44b45a06caea68ad3e2280c0028afcf136e9edfe28c2346
В зависимости от того, когда вы запустили эту команду, ваш результат может отличаться.
см. также:
- 🐳 Как добавлять, заменять и удалять теги образов Docker
- 🐳 Как получить хэш коммита в запущенном контейнере Docker
- 🐳 Отображение различий между двумя образами Docker