Пустая многоступенчатая сборка в Dockerfile

Я понимаю цель использования многоступенчатой ​​сборки, но не могу понять, почему вы хотели бы иметь такую ​​пустую стадию? Может кто-нибудь подробно рассказать о сценарии использования?

# Use an official Ubuntu 18.04 as parent image
FROM ubuntu:18.04

# Install python 2.7
FROM python:2.7

RUN apt-get update
RUN apt-get install -y git make g++
# more stuff, nothing using layer 0.

Источник: https://raw.githubusercontent.com/kubeflow/examples/master/xgboost_ames_housing/Dockerfile


person user3504575    schedule 29.11.2018    source источник
comment
Мое первое предположение, особенно с учетом комментария, - это неуверенность в том, что делает FROM.   -  person David Maze    schedule 30.11.2018


Ответы (1)


Человек, который написал этот Dockerfile, скорее всего, не понимает, как работает многоступенчатая сборка. Это обычное недоразумение, потому что общий запрос с Dockerfiles - объединить несколько образов вместе, а это не то, что предоставляют несколько строк FROM.

В этом примере загружается изображение, а затем оно сразу игнорируется. Если бы на более позднем этапе была команда COPY, можно было бы скопировать из этого предыдущего изображения, что является одной из немногих причин, по которым я видел, чтобы импортировать изображение, ничего не делая с ним:

ARG parent_ver=2.0
FROM repo:5000/parent:${parent_ver} as parent
FROM base as release
COPY --from=parent /some/file /dest
...

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

Поскольку в приведенном примере ничего из этого не было, все, что вы увидите, - это загруженный и неиспользуемый ненужный образ. Это замедляет сборку, занимает полосу пропускания и занимает дисковое пространство, но только на сервере сборки. Было бы полезно заполнить проблему в этом репозитории GitHub, чтобы исправить их пример.

person BMitch    schedule 30.11.2018