Скажите Docker build, чтобы игнорировать изменение порядка команд RUN - PullRequest
1 голос
/ 21 января 2020

Скажем, у нас есть это:

RUN go get 'github.com/foo/one'
RUN go get 'github.com/foo/two'
RUN go get 'github.com/foo/three'

и мы меняем порядок:

RUN go get 'github.com/foo/two'
RUN go get 'github.com/foo/three'
RUN go get 'github.com/foo/one'

кэш будет полностью аннулирован. Есть ли способ сказать docker build, что порядок зависимостей не имеет значения. Вот такой синтаксис:

PARALLEL START
RUN go get 'github.com/foo/two'
RUN go get 'github.com/foo/three'
RUN go get 'github.com/foo/one'
PARALLEL END

Ответы [ 2 ]

3 голосов
/ 21 января 2020

Docker использует многоуровневую архитектуру для создания изображения. Предположим, что ваш файл содержит следующие команды: команда 1 команда 2 команда 3

Что docker сделает, это выполнит команду 1 и создаст слой 1, а поверх этого слоя он выполнит другие команды, чтобы добавить слой 2 и слой 3 с уважением. Вы должны понимать, что при использовании этого шаблона docker используется процесс кэширования. Если вы измените порядок команд, он будет воссоздавать слои с той позиции, с которой вы изменили порядок.

3 голосов
/ 21 января 2020

Это невозможно из-за того, как работает система слоев при построении изображения.

Изображение создается путем добавления содержимого поверх существующего содержимого, поэтому, если вы измените порядок, вы измените структура и, следовательно, построение другого изображения.

Дело не в том, что кеш "аннулирован", а в том, что кеша вообще нет. С docker точки зрения, это вообще разные изображения.

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