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 и FROM
  • FROM может появляться несколько раз в одном 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 для windows cmd /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.

Дата изменения: