🐳 Нужно ли использовать дайджесты образов в Dockerfile

Зачем нужен хэш в образе Docker

by itisgood

Добавление ссылок на дайджест к вашим образам может сделать сборки более предсказуемыми, вот несколько плюсов и минусов их использования.

Например, вы можете определить это в своем 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

В зависимости от того, когда вы запустили эту команду, ваш результат может отличаться.

см. также:

 

Loading

You may also like

Leave a Comment