Почему я должен использовать docker ONBUILD? - PullRequest
0 голосов
/ 20 февраля 2020

1. Сценарий с ONBUILD

База Dockerfile

FROM ubuntu:latest
RUN apt-get update && apt-get install python3

ONBUILD COPY test.py test.py

Очевидно, что когда мы строим выше Dockerfile (test-image:latest), COPY не будет затронут. (test.py не скопировано)

Сейчас встроено Dockerfile

FROM test-image:latest

Теперь, когда мы построим выше Dockerfile, будет действовать COPY, копии test.py

2. Сценарий без ONBUILD

Я получаю то же самое без использования ONBUILD

База Dockerfile

FROM ubuntu:latest
RUN apt-get update && apt-get install python3

Выше Dockerfile build docker изображение, которое имеет python3 (test-image2:latest)

Теперь ребенок docker image Dockerfile

FROM test-image2:latest
COPY test.py /test.py

Итак, мой вопрос: зачем мне использовать ONBUILD или когда следует использовать? есть ли разница в производительности

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

В общем, вы не должны использовать ONBUILD вообще. То, что более поздняя строка Dockerfile FROM делает что-то иное, чем просто включение ее содержимого, нарушает принцип наименьшего удивления.

Если то, что вы пытаетесь сделать, ONBUILD - это что-то вроде инструкции RUN или ENV, семантически это не делает разница, делаете ли вы это в базовом изображении или в производном изображении. Это будет более эффективно, если вы сделаете это в базовом изображении (когда-либо, а не один раз, когда создается производное изображение).

Если вы пытаетесь ONBUILD COPY ... тогда вы ' мы пытаемся заставить файл c указать в хост-системе в точке запуска docker build, что немного странно для потребителя. Docker * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * НЕОБАДЕТ '. Образ onbuild терпит неудачу катастрофически, если в контексте новой сборки отсутствует добавляемый ресурс. Добавление отдельного тега, как рекомендовано выше, помогает смягчить это, позволяя автору Dockerfile сделать выбор.

Как отмечается на этой странице, если вы должны использовать ONBUILD, вы должны вызвать его в тег изображения, чтобы было понятно, когда вы создаете Dockerfile из этого изображения, происходит что-то странное. Большинство современных Docker изображений-концентраторов вообще не имеют -onbuild вариантов, даже для таких вещей, как tomcat , которые обычно имеют исключительно формулу c использования.

0 голосов
/ 20 февраля 2020

Я думаю, что ответ прост: вы хотите использовать «на сборке», когда ваш базовый образ нужно использовать у разных детей, поэтому вы (1) избегаете повторений и (2) вы ограничиваете пользователя изображения для копирования "test.py".

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