Требуется ли условие `FROM` в Dockerfile? - PullRequest
0 голосов
/ 10 октября 2019

Для всех докер-файлов, с которыми мне приходилось сталкиваться (что, по общему признанию, не так много), все они использовали предложение FROM, чтобы основать существующее изображение, даже если оно FROM scratch.

Требуется ли этот пункт? Возможно ли иметь Dockerfile без предложения FROM? Будет ли этот контейнер, таким образом, способен что-либо делать?

EDIT
Я прочитал

Файл Docker без директивы FROM не имеет родительского изображения и называется базовым изображением.

https://docs.docker.com/glossary/?term=parent%20image

Но я думаю, что это может быть ошибкой.

Ответы [ 3 ]

3 голосов
/ 10 октября 2019

На основании официальной документации требуется:

Инструкция FROM инициализирует новый этап сборки и устанавливает базовый образ для последующих инструкций. Таким образом, действительный Dockerfile ДОЛЖЕН начинаться с инструкции FROM . Изображение может быть любым действительным изображением - его особенно легко начать, потянув изображение из общедоступных репозиториев.

https://docs.docker.com/engine/reference/builder/#from

2 голосов
/ 10 октября 2019

Краткий ответ: да , требуется предложение FROM. Но к этому выводу легче прийти, если немного подумать о процессе построения образа.

Dockerfile - это просто способ описать последовательность команд, которые должны быть выполнены подсистемой сборки Docker для создания образа. И изображение - это просто набор обычных файлов, в первую очередь пользовательских файлов определенного дистрибутива Linux, но, возможно, с некоторыми дополнительными файлами поверх него. Каждое изображение Docker основано на родительском изображении и добавляет свои собственные файлы в родительский набор. Каждое изображение должно начинаться с чего-то, т.е. указывать его родителя. И родитель всех родителей - это изображение scratch, определенное как noop, то есть пустой набор файлов.

Посмотрите на busybox image:

FROM scratch
ADD busybox.tar.xz /
CMD ["sh"]

Он начинается с нуля, то есть с пустого набора файлов, и добавляет (т.е. копирует) к этому набору набор файлов из busybox.tar.xz архива.

Теперь, если вы хотите создать свой собственный образ, вы можете начать с busybox изображения и описать, какие файлы (и как) вы собираетесь добавить:

FROM busybox:latest

ADD myfile.txt /

Но каждыйвремя, когда новое изображение должно начинаться ОТ чего-то.

1 голос
/ 10 октября 2019

Да, это так. Он определяет слои, на которых основано изображение, которое вы строите. Если вы хотите запустить изображение с нуля, докер предлагает изображение под названием scratch

В документации также сказано:

Родительское изображениеэто изображение, на котором ваше изображение основано

, а также

Базовое изображение содержит в своем Dockerfile "С нуля".

См. документация по базовым изображениям

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