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.