Как сделать детерминированные сборки изображений Docker? - PullRequest
0 голосов
/ 13 ноября 2018

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

FROM scratch
ENV a b

, выдает разные идентификаторы при многократной сборке с использованием docker build --no-cache .

Как я могу сделать свои сборки детерминированными и что вызывает измененияв идентификаторах изображений?Когда кэширование включено, создается тот же идентификатор.

Причина, по которой я пытаюсь получить эту воспроизводимость, заключается в том, чтобы включить создание одинаковых слоев в среде распределенной сборки.Я не могу контролировать, где выполняется сборка, поэтому я не могу знать, что находится в кеше.Кроме того, сборка Docker загружает файлы с помощью wget с ftp, которые могли или не могли измениться, в настоящее время я не могу легко сказать Docker из Dockerfile, если результаты RUN должны сделать кэш недействительным.Поэтому, если бы я мог просто создать один и тот же идентификатор для идентичных слоев (когда кеш не используется), эти слои не нужно было бы «подталкивать» и «вытягивать» снова.

Также все причины, перечисленные здесь:https://reproducible -builds.org /

1 Ответ

0 голосов
/ 14 ноября 2018

Идентификатор изображения - это SHA256 объекта конфигурации изображения (то, что вы получаете, когда делаете docker image inspect).Запустите это с изображениями, которые вы создаете, и вы увидите различия между ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...