так, чтобы при изменении определённого аргумента не производился ребилд слоёв, зависимых от него? В качестве примера у меня есть такая последовательность команд:
ARG JOBS=4
RUN make a -j$JOBS
RUN make b -j$JOBS
Очевидно, что изменение JOBS принципиально не влияет на результат сборки, а лишь на её скорость, поэтому, если make a уже собралось, я бы хотел его переиспользовать этот слой, несмотря на изменение JOBS через --build-arg. Это возможно?
Нет, так работает кэширование слоев
Вообще, похожего поведения ведь можно добиться через доступ по сети, например, вот так: RUN make a -j$(curl ...) RUN make b -j$(curl ...) И меня разочаровывает, что нет штатного инструмента, позволяющего сознательно (и с полной ответственностью на авторе такого кода) сделать то же самое с аргументами.
Зачем вообще делать это через build-arg?
Я не вижу других вариантов, кроме как брать максимально доступное число ядер или указать какое-то конкретное число. С первым вариантом система становится иногда совершенно неотзывчивой, поэтому хочется иметь возможность задавать значения по-меньше. Просто уменьшить их для всех разработчиков, которые будут делать билд тоже как-то не очень.
почему бы не брать 0.5*число ядер, или что-нибудь подобное?
Потому что других разработчиков, которые могут собирать образ, может не волновать проблема отзывчивости, но может волновать скорость. RUN --mount=type=cache выглядит интересно, попытаюсь разобраться, спасибо!
Обсуждают сегодня