Пустая многоэтапная сборка в Dockerfile - PullRequest
0 голосов
/ 29 ноября 2018

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

# 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

1 Ответ

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

Человек, написавший этот 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.

...