(перевод официальной документации Docker)

FROM <image> [AS <name>]

или

FROM <image>[:<tag>] [AS <name>]

или

FROM <image>[@<digest>] [AS <name>]

Dockerfile должен начинаться с инструкции FROM. Она начинает новый этап сборки и устанавливает базовый образ для последующих инструкций.

  • ARG единственная инструкция которая может предшествовать FROM в Dockerfile.
  • FROM может появляться несколько раз в одном Dockerfile для создания нескольких образов или использования одного этапа сборки в качестве зависимости для другого.
  • При желании можно дать имя новому этапу сборки, добавив AS name в инструкцию FROM.
  • Значения tag или digest являются необязательными. Если вы не указали ни один из них, по умолчанию сборщик принимает тег latest.

Взаимодействие 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)
  • RUN ["executable", "param1", "param2"] (форма exec)

Инструкция RUN будет выполнять любые команды в новом слое поверх текущего образа и фиксировать результаты.

пример: при использовании образа Ubuntu можно обновить систему прописав команду RUN apt-get update && apt-get upgrade.

Слоистость RUN и генерация коммитов соответствуют основным концепциям Docker, где коммиты дешевы, и контейнеры могут быть созданы из любой точки в истории образа.