From
INPROGRESS.
+RUN от 2019.08.10.
(перевод официальной документации Docker)
FROM <image> [AS <name>]
или
FROM <image>[:<tag>] [AS <name>]
или
FROM <image>[@<digest>] [AS <name>]
Dockerfile должен начинаться с инструкции FROM. Она начинает новый этап сборки и устанавливает базовый образ для последующих инструкций. Образом может быть любой валидный образ, особенно легко начать с выдергивания образа из Публичного репозитория
ARGединственная инструкция которая может предшествоватьFROMвDockerfile. Смотри взаимодействие ARG и FROMFROMможет появляться несколько раз в одном Dockerfile для создания нескольких образов или использования одного этапа сборки в качестве зависимости для другого. Просто запишите последний идентификатор образа, выводимый коммитом перед каждой новой инструкциейFROM. Каждая инструкцияFROMочищает любое состояние, созданное предыдущими инструкциями.- При желании можно дать имя новому этапу сборки, добавив
AS nameв инструкциюFROM. Имя можно использовать в последующих инструкцияхFROMиCOPY --from=<name|index>для ссылки на образ, созданный на этом этапе. - Значения
tagилиdigestявляются необязательными. Если вы не указали ни один из них, по умолчанию сборщик принимает тегlatest. Сборщик возвращает ошибку, если не может найти указанное значениеtag.
Взаимодействие ARG и FROM
Инструкция FROM поддерживают переменные, объявленные любыми инструкциями ARG, которые встречаются до первого FROM
ARG CODE_VERSION=latest
FROM base:${CODE_VERSION}
CMD /code/run-app
FROM extras:${CODE_VERSION}
CMD /code/run-extras
ARG объявленный до FROM, находится вне процесса сборки, поэтому, его нельзя использовать ни в одной инструкции после FROM. Чтобы использовать значение по умолчанию для ARG, объявленного перед первым FROM, используйте инструкцию ARG без значения внутри шага сборки:
ARG VERSION=latest
FROM busybox:$VERSION
ARG VERSION
RUN echo $VERSION > image_version
RUN
RUN принимает две формы:
RUN <command>(форма shell, команда вызывается в shell, в linux по умолчанию/bin/sh -cдля windowscmd /S /C)RUN ["executable", "param1", "param2"](форма exec (прим. Exec-форма по синтаксису напоминает описание Json-массива.))
Инструкция RUN будет выполнять любые команды в новом слое поверх текущего образа и фиксировать результаты. Полученный образ будет использоваться для следующего шага в Dockerfile.
пример: при использовании образа Ubuntu можно обновить систему прописав команду RUN apt-get update && apt-get upgrade.
exec форма RUN ["mkdir", "/dir_name"] - тут прописали создание новой дирректории.
Слоистость RUN и генерация коммитов соответствуют основным концепциям Docker, где коммиты дешевы, и контейнеры могут быть созданы из любой точки в истории образа, по аналогии с контролем версий.
TODO… The exec form makes it possible to avoid shell string munging, and to RUN commands using a base image that does not contain the specified shell executable.
The default shell for the shell form can be changed using the SHELL command.